在installshield中,如何在安装里,加个卸载快捷方式在开始程序里,急~~~

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在installshield中,如何在安装里,加个卸载快捷方式在开始程序里,急~~~相关的知识,希望对你有一定的参考价值。

在shortcut下,先创建一个快捷方式,然后分别将它的属性Arguments、Target 分别设为:/x [ProductCode]、 [SystemFolder]msiexec.exe就可以了 参考技术A SetupFolders()

STRING LogFilePath;

begin

if svDefGroup != " " then
//
// Add main program icon
//
AddFolderIcon(FOLDER_PROGRAMS^svDefGroup,@PRODUCT_NAME,TARGETDIR^ "\\YourExeHere.exe ",
TARGETDIR,TARGETDIR^ "\\YourExeHere.exe ",0, " ",REPLACE);

//
// Add Uninstall Icon
//
LogFilePath = TARGETDIR^ "\\ "^UNINST_LOGFILE_NAME;
LongPathToShortPath(LogFilePath);
AddFolderIcon(FOLDER_PROGRAMS^svDefGroup,( "卸载 " + @PRODUCT_NAME),
( "IsUninst.exe -f " + LogFilePath),WINDIR, " ",0, " ",REPLACE);
endif;
end

希望对你有用追问

请问svDefGroup什么类型的
还有UNINST_LOGFILE_NAME需要改吗,不改有错误怎么办啊

追答

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; InstallShield各个版本中存在一点点细微的差异。因为我无法安装以前的版本来验证,所以没能在这里对比每一个版本的情况。但记得当初把 InstallShieldProfessional 7 制作的安装程序 Project 升级到 InstallShield Developer 8.02 版本之后,我在InstallScript 中创建的卸载快捷方式就有问题了。
在 那个类型为 "InstallShield MSI Project" 的项目中,创建卸载时使用的是 UNINSTALL_STRING中提供的值。仔细跟踪检查发现,正是这个 UNINSTALL_STRING 在新的版本中其引号的封闭位置不对,造成在LaunchAppAndWait中使用的时候,对于长文件路径的引号封闭不正确, 于是无法正常使用(跟踪调试时把其值复制出来在“运行”执行,或查看创建的快捷方式的属性:“目标”)。
当时写了一段代码处理这一情况,可惜手边 没有保留。于是(搜索 CSDN )找到了当时回复别人的帖子时写的一段处理代码:
szUninstall = UNINSTALL_STRING;
nResult = StrFind(szUninstall, ".exe");
if ( ( StrFind(szUninstall, "\"") = 0 ) ) then
StrSub(szTemp1, szUninstall, 0, nResult + 4);
StrSub(szTemp2, szUninstall, nResult + 4, 200);
szUninstall = "\"" + szTemp1 + "\"" + szTemp2;
UNINSTALL_STRING = szUninstall;
endif

追问

我非常感谢您的回答,但是您能给我个实用的吗
整那么多,我即看不懂,加进去后运行又没有反应

追答

还看不懂? 这已经很详细了啊 郁闷

如何使用 InstallShield 在 Windows 上最好地安装 Python + 模块

【中文标题】如何使用 InstallShield 在 Windows 上最好地安装 Python + 模块【英文标题】:How best to install Python + modules on Windows using InstallShield 【发布时间】:2017-09-05 23:51:52 【问题描述】:

我们有一个现有的 InstallShield 安装程序,它会安装以下内容:

    我们的产品 Python 2.7.13 通过官方 Windows exe 安装程序 3 个 python 模块(pywin32、psycopg 和 setuptools)通过 exe 安装程序 我们生产的 2 个鸡蛋模块

Python 是静默安装的,但是 3 个模块安装程序会打开他们自己的安装程序窗口,这些窗口会阻止我们的安装,看起来非常不专业,并且需要用户单击它们。似乎没有我们可以传递的参数来强制它们静默运行。

我们的安装人员已经 7 岁了。我认为 Python 模块在 Windows 上安装方式的进步已经使基于 exe 的模块安装程序完全过时,但我似乎无法找到关于推荐的“现代”安装方法的明确答案。鉴于以下限制,我们可以做些什么来使安装程序运行完成而无需单击模块安装程序?

以下条件适用:

    我们必须继续使用 InstallShield 作为安装引擎。 在安装过程中我们不会有 Internet 连接。 安装适用于计算机上的所有用户。

【问题讨论】:

【参考方案1】:

我这里从来没有收到过答复,所以我独自前行。

Windows Python 2.7.13 安装默认包括 pip 和 setuptools。这一事实使我能够从 .exe 模块安装程序切换到 Wheel (.whl) 安装程序。由于我们没有 Internet 连接,我无法使用未满足依赖项的 whl,但幸运的是,我需要的模块都不属于该类别。一旦安装了 Python 本身,每个 pip 安装都会直接从 InstallShield 代码通过 LaunchAppAndWait() 触发。

唯一的“问题”是 pywin32 模块有一个安装后脚本,必须在 pip 安装后运行。这是由 exe 安装程序自动处理的,所以我什至不知道它,除非 whl 安装最初出现问题。

【讨论】:

另一种选择是使用捆绑工具。有一些工具可以将你的 python 应用程序捆绑到 .exe 中。

以上是关于在installshield中,如何在安装里,加个卸载快捷方式在开始程序里,急~~~的主要内容,如果未能解决你的问题,请参考以下文章

如何在InstallShield项目中以静默方式安装msi文件

如何使用 InstallShield 在 Windows 上最好地安装 Python + 模块

Installshield:如何更新已经运行的 Windows 服务

InstallShield嵌套安装(winform安装程序如何在打包的时候将其他安装包也打进去)

InstallShield条件功能安装

installshield怎么安装多语言的程序