WIndows 安装程序将快捷方式放入带有 属性 的自定义文件夹中

WIndows Installer Putting shortcuts into a custom folder with a property

我正在使用 InstallShield 构建安装程序。这是一个基本的 MSI 项目(我不希望对 InstallShield 有任何依赖,这可能会使将来更难迁移到 WiX)。我正在尝试将一些快捷方式放入我希望定位为的自定义文件夹中:

[INSTALLDIR]\[PROP] Environment

所有的快捷方式都会指向[INSTALLDIR]\My.exe [PROP],例如安装的 executable 带有命令行参数。

在 InstallShield(以及 MSI)中,我不能只将目录 table 中的文件夹设置为 [PROP] Environment(实际上我可以,但这给了我一个字面上命名的文件夹[PROP] Environment)。我尝试使用 35 型自定义操作(设置目录),但它要么什么都不做,要么给我 Could not access network location {expanded property} Environment,具体取决于我在序列中的位置。目前它在 SetupProgress 之后的 UI 序列中。我已经在 UI 和执行序列的不同位置尝试过,但没有成功。

万一它对解决方案产生影响,最终目标是能够 运行 安装程序多次(作为维护或多次安装),但后续 "installs" 将只需在新文件夹中添加其他快捷方式,例如:

PROD Environment
TEST Environment
TRAINING Environment

欢迎提供 WiX 解决方案。我发现 WiX 文档和代码比 IS 帮助更能解释正在发生的事情。

更新:如果有帮助,我已经有了一个 .Net 自定义操作(通过 DTF),以防我可以那样做。我正在考虑在那里创建快捷方式。我不确定这将如何影响广告之类的东西,我知道我需要添加一个 CA 来卸载它们。

更新更新:没有帮助。或者,至少,没有必要那样做,而且,有人可能会争辩说,不应该那样做。

解决方案非常简单,即使有点复杂。我最初使用 InstallShield 创建它,但过了一段时间,您将偏离 InstallShield GUI 的功能。我将记录 MSI tables(来自 InstallShield DirectEditor),因此它应该很容易转换为 WiX。您需要在必要时添加标识符(在您需要它们的地方应该很明显):

  1. 在包含快捷方式的功能中创建一个空组件:
    • 在 FeatureComponents table 中,添加一行:Feature_ = DefaultFeature and Component_ = MyCustomShortcuts
    • 在组件table中添加一行:Component = MyCustomShortcuts, Directory_ = MYSHORTCUTFOLDER
  2. 创建目录
    • 在目录 table 中为您的快捷方式添加一行:Directory = MYSHORTCUTFOLDER, Directory_Parent = TARGETDIR, DefaultDir = .
  3. 添加一个自定义操作,输入51(设置属性)根据你想控制的public属性命名文件夹名称:
    • Action = UpdateShortcutFolder, Type = 51, Source = MYSHORTCUTFOLDER, Target = [INSTALLDIR][SHORTCUT_FOLDER_PREFIX] Shortcuts
  4. 创建您的快捷方式。在快捷方式 table 中添加一行:
    • Directory = MYSHORTCUTFOLDER, Name=MyProg~1|MyProgram, Component = MyProgramComponent, Target = [INSTALLDIR]MyProgram.exe

就是这样。快捷步骤是 InstallShield UI 无法处理的地方。幸运的是,从 InstallShield Premier 2014 开始,它只会忽略它不理解的内容,因此您不会在系统 Configuration/Shortcuts 视图中看到您的快捷方式。但是它们将被安装。

在我的测试中,卸载时快捷方式和自定义目录似乎都被删除了。