[求助]installshield8.0卸载问题

burnfire 2004-04-27 09:00:24
我以前用的6.22,现在刚接触8.0,有的地方还需请教

我卸载后发现安装目录下的文件都删除了,但是子目录依然存在,
component下的file是以dynamic file link形式添加文件夹及文件的,
不知该在哪里设置文件夹的卸载属性,component属性permanent是选的no啊?

还有一疑问,我用反安装的快捷方式卸载时,却不执行function OnMaintUIBefore()中的代码,而是直接删除程序文件.而我在控制面板中卸载可以正常执行,怎么回事?
请教各位!
...全文
250 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
喝醉的咖啡 2004-07-14
  • 打赏
  • 举报
回复
不用脚本的方法:

InstallScript MSI Project 中,可以创建一个类型为 New ShortCut to PreExisting File 的快捷方式,target 为:[SystemFolder]msiexec.exe
参数 arguments 为
/x {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
这里填的是你的安装包的 Product Code,在 eneral Information -〉 Product Properties -〉Product Code 下可以找到。

或者 target为:
[CommonFilesFolder]InstallShield\Driver\7\Intel 32\IDriver.exe
Arguments 为:/M{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}

官方 help 中使用脚本的方法(注意前面我说的isd7的UNINSTALL_STRING的问题):
prototype CreateUninstallShortcut();
function CreateUninstallShortcut()
string strCmdLine;
LIST lstPath;
begin

// For an InstallScript installation:
strCmdLine = DISK1TARGET ^ "Setup.exe";
// For an InstallScript MSI installation:
strCmdLine = UNINSTALL_STRING;

// The path has to be handled differently if you are running
// an InstallScript MSI installation on Windows 9X.
if ( SYSINFO.WIN9X.bWin9X ) then
lstPath = ListCreate( STRINGLIST );
StrGetTokens( lstPath, UNINSTALL_STRING, "/" );

ListGetFirstString( lstPath, strCmdLine );
LongPathToQuote( strCmdLine, TRUE );

strCmdLine = strCmdLine + " /M" + PRODUCT_GUID;
endif;

// Create the shortcut.
AddFolderIcon(FOLDER_PROGRAMS ^ "Uninstall Shortcut", "Run the Uninstall",strCmdLine, "","",0, "", NULL );
end;

burnfire 2004-05-10
  • 打赏
  • 举报
回复
呵呵!谢谢前辈!

>如果按默认路径安装例如c:\\program files\\myapplication,卸载后就会有少许文件残留下来,(注意:这里的残留文件非日志文件,而是某些动态链接库文件.dll后缀的)但是若自定义路径例如x:\\myapplication(x为任意盘符),卸载后就没有上述情况.我之前还以为是卸载过程中有程序仍然运行,但后面一种情况否定了我的设想,至今不清楚是何原因?

>将添加的代码放在判断维护方式if (nType = REMOVEALL) then之后即可是不是代码中删除了一把?
(是指删除整个INSTALLDIR目录吧?)

通过这段时间使用6.22和8.0小有体会
6.22作为一般的安装包制作足以胜任,且简单易用
8.0在前者的基础上得到很大增强,功能全面,但是有些地方较6.22复杂化了(以上纯属一大四小弟看法,如有异议欢迎探讨)

题外话:呵呵!这个20分的帖子,我还真不想结,希望各位分享is的使用经验!


喝醉的咖啡 2004-05-08
  • 打赏
  • 举报
回复
卸载问题:
很头疼,再次点安装程序或者更新的安装程序会自动进行更新/卸载,但根本不触发维护事件。在OnBegin中对维护状态判断其结果也是错误的。
你的问题与我的还不同,恭喜你解决了。呵呵

卸载快捷方式问题:
方法2的 UNINSTLL_STRING 我在 W2K/XP 下都因为长文件名错误的使用引号造成无法使用,所以才自己处理了一下。9.0没有这个问题,呵呵


皮肤问题:
一样的,8.0/9.0 都有这个毛病,偶尔正常
我也烦呢,也许是卸载的时候没有找到那个皮肤文件
呵呵,有空再研究吧

或者期待分享你的经验,hoho
喝醉的咖啡 2004-05-08
  • 打赏
  • 举报
回复
>如果按默认路径安装例如c:\\program files\\myapplication,卸载后就会有少许文件残留下来
呵呵,想必这个问题你已经自己解决了:
>将添加的代码放在判断维护方式if (nType = REMOVEALL) then之后即可
是不是代码中删除了一把?
hoho 我也是这么干地~`

不过一般没必要啦,我这里没剩下多少东西的,一般是我的自动更新程序留下的日志 :)
burnfire 2004-05-06
  • 打赏
  • 举报
回复
不好意思,又发现了一卸载问题:

我用8.0打包时在用户面板里dialogs设置了一非none皮肤
安装过程中显示正常,而卸载时显示异常,部分皮肤显示不出来
不知怎么回事?有人遇到此问题么?
喝醉的咖啡 2004-04-30
  • 打赏
  • 举报
回复
呵呵,这个破论坛管理太差,好不容易找到了最新的一份,否则要累死。
————————————————————————————
回复人: piggybank(吞硬币的小猪) ( ) 信誉:100 2004-4-6 13:20:21 得分:0



Install Shield Developer 8.0x 版本的 UNINSTLL_STRING 有个BUG


使用 UNINSTALL_STRING 可以方便的创建一个快捷方式,其保存了卸载当前安装的软件所需的信息:调用 IS 的卸载程序,并提供当前安装产品的 Product GUID。

所以,使用 AddFolderIcon()方法创建一个指向 UNINSTALL_STRING 的快捷方式即可方便的实现“卸载快捷方式”。该快捷方式的图标可以使用 WINDIR ^ "System32\\msiexec.exe" 提供的图标(你可以用别的图标,我比较懒啦)。

但这个版本存在的 Bug 就是 UNINSTALL_STRING 的双引号使用不正确,造成直接使用该 UNINSTALL_STRING 创建的快捷方式无法正常使用——当我把 IS7 下面作的安装程序移植到 IS8 下才发现存在这样的 bug。

解决方法很简单,写了一小段脚本来处理一下 UNINSTALL_STRING,朋友可以将它做成一个函数:


szUninstall = UNINSTALL_STRING;
nResult = StrFind(szUninstall, ".exe");
if ( ( StrFind(szUninstall, "\"") < 0 ) && ( nResult >= 0 ) ) then
StrSub(szTemp1, szUninstall, 0, nResult + 4);
StrSub(szTemp2, szUninstall, nResult + 4, 200);
szUninstall = "\"" + szTemp1 + "\"" + szTemp2;
UNINSTALL_STRING = szUninstall;
end if

然后继续使用即可。



补充说明一下,9.1 没有这个问题 :)
喝醉的咖啡 2004-04-30
  • 打赏
  • 举报
回复
子目录嘛,你在 Files and Folder 面板中的目标目录下创建即可,这样会被自动卸载(除非还有文件在使用或者留下了非安装时安装的文件)
其实最好一点儿一点儿自己来拖放,这样得到的 Components 比较符合你原有的结构,调整起来方便一些(也可以不调整,我比较喜欢整整齐齐的,不喜欢它自动命名,呵呵)

自解压的问题没错,就是 Release Wizard 或者 Release 的属性里设置,还可以加上口令保护和数字签名。

反安装时,不执行function OnMaintUIBefore(),因为不属于维护状态。添加/删除程序中实际上是通过维护状态来进行后续操作的——比如你可以允许 添加/删除部件、修复、卸载。

呵呵,其实最恼人的地方还不是这里:
我做了Update Patch,但用户如果不小心点了新版本的完整安装包,而原来已经安装了上一个版本,此时会提示是否更新原有产品——选择了更新,结果会很糟糕...
可是我一直没找到如何在出现这个提示之前截获它!
晕呢,呵呵

chinaren502 2004-04-30
  • 打赏
  • 举报
回复
"反安装时,不执行function OnMaintUIBefore()"

请问如何操作呀?
burnfire 2004-04-30
  • 打赏
  • 举报
回复
没有中文版的帮助,只有看is自带的英文帮助
我的E文还不是蛮烂,只有自己查了,呵呵!
chinaren502 2004-04-30
  • 打赏
  • 举报
回复
burnfire() 你好

请问哪儿有中文版的帮助呀?多谢
burnfire 2004-04-30
  • 打赏
  • 举报
回复
呵呵!谢谢 piggybank(吞硬币的小猪) ,前辈帮了我不少忙!

后来我用拖拽目录的方法进行打包,卸载确实没有什么大问题,还有小问题:
如果按默认路径安装例如c:\\program files\\myapplication,卸载后就会有少许文件残留下来,如果选择自定义目录安装就不会发生上述问题,现在还不清楚什么原因
不过如果要修改某处时,is8.0变得非常占资源,就像死机(不知是我机子慢还是is的原因,不知各位遇到没有?)

至于制作反安装快捷方式方法有2种,我的工程类型为InstallScript MSI Projects
1 在添加的反安装快捷方式设置属性如下:
Arguments /M{Product Code}
Advertised No
Target [CommonFilesFolder]InstallShield\Driver\8\Intel 32\IDriver.exe
2 直接在脚本中添加代码
prototype CreateUninstallShortcut();
function CreateUninstallShortcut()
string strCmdLine;
LIST lstPath;
begin
strCmdLine = UNINSTALL_STRING;

// The path has to be handled differently if you are running on
// Windows 9X.
if ( SYSINFO.WIN9X.bWin9X ) then
lstPath = ListCreate( STRINGLIST );
StrGetTokens( lstPath, UNINSTALL_STRING, "/" );

ListGetFirstString( lstPath, strCmdLine );
LongPathToQuote( strCmdLine, TRUE );

strCmdLine = strCmdLine + " /M" + PRODUCT_GUID;
endif;

// Create the shortcut.
AddFolderIcon(FOLDER_PROGRAMS ^ "Uninstall Shortcut", "Run the Uninstall",strCmdLine, "","",0, "", NULL );
end;

以上在帮助文档都有介绍

至于“用反安装的快捷方式卸载时,却不执行function OnMaintUIBefore()中的代码“的问题我已解决,将添加的代码放在判断维护方式if (nType = REMOVEALL) then之后即可




daxiao888 2004-04-30
  • 打赏
  • 举报
回复
要打包ado程序,要那些文件呀?
burnfire 2004-04-29
  • 打赏
  • 举报
回复
在releases向导的media type选择network image或web形式即可找到单个setup.exe或.msi自解压安装包。

我后来发现在帮助文档中介绍了三种添加文件组件方法:
1 在files and folders面板中,从资源文件夹往目的文件夹拖拽整个目录
2 利用鼠标右键属性中的添加component向导
3 就是我用的component下的file是以dynamic file link形式添加目录

前两种都是自动生成components名,类似AllOtherFiles(*),这样每个文件组下只有单一的文件(不包括子目录)卸载时删除每个文件组下所有文件,而以dynamic file link形式添加目录是一个文件组下包括该路径下树形目录(当然包括子目录及其中的文件)所以卸载后出现子目录无法卸载的问题,这也是我伤脑筋的地方。我想应该有设置(卸载包括子目录)这项属性吧!可就是找不到,希望遇到此问题的高人指点一下,我现在一直郁闷中……谢谢
burnfire 2004-04-28
  • 打赏
  • 举报
回复
我后来发现如果在files and folders面板中,从资源文件夹往目的文件夹拖拽整个目录这种方式可以正常卸载,但是自动形成components名,类似AllOtherFiles(*),感觉不爽!
可能我以前一直用is6.22习惯了,感觉特别扭,呵呵!

如果component下的file是以dynamic file link形式添加文件夹及文件的,怎样解决卸载不干净的问题呢?

另外请教,is8.0在哪里设置自解压安装包?

chinaren502 2004-04-28
  • 打赏
  • 举报
回复
我业有同感,寻求解决。

burnfire() 你好
请教 “设置自解压安装包的地方”在哪儿呀?多谢
burnfire 2004-04-28
  • 打赏
  • 举报
回复
我自己找到了设置自解压安装包的地方,谢谢哪位帮我解决一下“component下的file是以dynamic file link形式添加文件目录,怎样解决卸载不干净的问题”。
burnfire 2004-04-27
  • 打赏
  • 举报
回复
另外请教,is8.0在哪里设置自解压安装包,is6.0我知道,8.0不熟悉
麻烦就是安装程序文件一幕了然,别人看得清清楚楚

3,425

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 其他开发语言
社区管理员
  • 其他开发语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧