【问题标题】:Running into issue creating shortcut on desktop在桌面上创建快捷方式时遇到问题
【发布时间】:2016-06-06 17:12:55
【问题描述】:

我刚刚创建了一个带有复选框的自定义对话框,询问用户是否要创建桌面快捷方式。我以前总是包含一个我不使用AskText() 功能的快捷方式,因为我计划稍后在此页面中添加更多内容,并希望将这几个选项简化到这一页面。

当我运行时,我的桌面上有一个项目,但这不是我所期望的。目标似乎指向桌面本身的位置,而不是实际的可执行文件。此外,此快捷方式在卸载时不会删除(我假设无论如何都需要单独处理),并且快捷方式需要手动删除管理员权限(出于显而易见的原因,我不希望这样做)。

下面是我的 InstallScript 代码。它位于InstallFiles 之后插入的自定义操作中。

function MyFunction(hMSI)

    STRING szProgramFolder, szItemName, szCommandLine, szWorkingDir;
    STRING szShortCutKey, szProgram, szParam, szIconPath;
    NUMBER nIcon, nResult;

begin
    szProgramFolder = FOLDER_DESKTOP;
    szItemName = "myProgram";

    szProgram = INSTALLDIR + "myProgram.exe" ;
    LongPathToQuote (szProgram, TRUE);
    szCommandLine = szProgram;

    szWorkingDir = INSTALLDIR;
    szIconPath = "";
    nIcon = 0;
    szShortCutKey = "";

    nResult = AddFolderIcon (szProgramFolder, szItemName, szCommandLine,szWorkingDir, 
      szIconPath, nIcon, szShortCutKey, REPLACE);

end;  

虽然我对 InstallShield(更不用说 InstallScript)的了解非常有限,但我不太确定我哪里出错了。

【问题讨论】:

  • 它是立即的还是延迟的自定义操作?延迟自定义操作不会初始化 INSTALLDIR 变量。
  • @yossiz74 - 我已将其更改为立即操作,并将其放在 ExecuteAction 之后,它似乎在很大程度上可以正常工作。
  • 太好了,我会把它添加为答案

标签: installshield shortcut installscript basic-msi


【解决方案1】:

事实证明,这是一个延迟的自定义操作,因此未初始化 INSTALLDIR 变量(也未初始化任何其他 Windows Installer 内置变量)。将其更改为即时类型的自定义操作(并将其重新定位到执行序列中的适当位置),它应该可以工作。

【讨论】:

    【解决方案2】:

    要修复快捷方式的参数,首先要确保它们是正确的。调试你的函数来验证你实际上是在传递你想要的。正如所评论的,INSTALLDIR 可能无法直接用于 InstallScript 自定义操作。 “调试”的一种简单方法是将MessageBox(szCommandLine, 0); 之类的调用添加到代码中的关键点。如果您发现您正在传递类似C:\Program Files\Company\ProductmyProgram.exe 的内容,请考虑使用^ 运算符来连接您的路径:szProgram = INSTALLDIR ^ "myProgram.exe";

    要卸载快捷方式,您必须了解 MSI 项目中的自定义操作不会自动反转。所以使用不同的方法。要么在卸载期间在另一个操作中显式编码其删除,切换到纯 InstallScript,其中日志记录将反转您的操作,或者使用适当的基于 MSI 的方法。对于最后一个,在其自己的组件中定义快捷方式,并为组件提供与您在 UI 中设置的属性相关的条件(或现在通过 AskText),或者跳过条件并通过将子特征中的组件。然后 Windows Installer 将为您跟踪并删除该快捷方式。

    【讨论】:

      猜你喜欢
      • 2011-06-21
      • 2013-03-14
      • 1970-01-01
      • 2013-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      相关资源
      最近更新 更多