Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows installer WIndows Installer将快捷方式放入具有属性的自定义文件夹_Windows Installer_Installshield - Fatal编程技术网

Windows installer WIndows Installer将快捷方式放入具有属性的自定义文件夹

Windows installer WIndows Installer将快捷方式放入具有属性的自定义文件夹,windows-installer,installshield,Windows Installer,Installshield,我正在使用InstallShield构建安装程序。这是一个基本的MSI项目(我不希望对InstallShield有任何依赖性,这可能会使将来迁移到WiX更加困难)。我正在尝试将一些快捷方式放入自定义文件夹中,我希望将其定位为: [INSTALLDIR]\[PROP] Environment 所有快捷方式都将指向[INSTALLDIR]\My.exe[PROP],例如,带有命令行参数的已安装可执行文件 在InstallShield(看起来是MSI)中,我不能将目录表中的文件夹设置为[PROP]E

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

[INSTALLDIR]\[PROP] Environment
所有快捷方式都将指向
[INSTALLDIR]\My.exe[PROP]
,例如,带有命令行参数的已安装可执行文件

在InstallShield(看起来是MSI)中,我不能将目录表中的文件夹设置为
[PROP]Environment
(实际上我可以,但这会给我一个文件夹,字面上命名为
[PROP]Environment
)。我曾尝试使用类型35自定义操作(设置目录),但它要么什么也不做,要么给我
无法访问网络位置{expanded property}环境
,这取决于我在序列中的位置。当前,它位于SetupProgress之后的UI序列中。我在UI和Execute序列中的不同位置尝试过它,但没有成功

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

PROD Environment
TEST Environment
TRAINING Environment
请随时提供WiX解决方案。我发现WiX文档和代码在解释正在发生的事情方面比IS帮助要好得多

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


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

解决方案非常简单,如果有点复杂的话。我最初使用InstallShield创建它,但过了一段时间,您将超出InstallShield GUI的功能范围。我将记录MSI表(从InstallShield DirectEditor),以便将其转换为WiX。您需要在必要时添加标识符(在需要它们的地方应该很明显):

  • 在包含快捷方式的要素中创建空零部件:
    • 在FeatureComponents表中,添加一行:
      Feature\uU=DefaultFeature和Component\uU=MyCustomShortcuts
    • 在Component表中添加一行:
      Component=MyCustomShortcuts,Directory\uz=MYSHORTCUTFOLDER
  • 创建目录
    • 在目录表中为快捷方式添加一行:
      Directory=MYSHORTCUTFOLDER,Directory\u Parent=TARGETDIR,DefaultDir=。
  • 添加自定义操作,键入51(设置属性),根据要控制名称的公共属性命名文件夹:
    • Action=UpdateShortcutFolder,Type=51,Source=MYSHORTCUTFOLDER,Target=[INSTALLDIR][SHORTCUT\u FOLDER\u PREFIX]快捷方式
  • 创建快捷方式。在快捷方式表中添加一行:
    • Directory=MYSHORTCUTFOLDER,Name=MyProg~1 | MyProgram,Component=myprogrammonent,Target=[INSTALLDIR]MyProgram.exe
  • 就这样。快捷步骤是InstallShield UI无法处理事情的地方。幸运的是,从InstallShield Premier 2014开始,它只会忽略它不理解的内容,因此您不会在系统配置/快捷方式视图中看到快捷方式。不过,它们将被安装


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

    可以
    PROP
    是任何东西,或者该属性可以被限制为固定的值集,例如
    {PROD | TEST | TRAINING}
    ?如果可以限制,那么值集是什么?不,不能限制。或者,我宁愿不要。另外,如果有帮助的话,我已经有了一个.Net自定义操作(通过DTF),以防我可以这样做。为了在需要信用的地方提供信用,我和InstallShield支持工程师Andrew共同达成了此解决方案。尽管我可能很想喋喋不休地谈论InstallShield UI/UX有多么糟糕,但到目前为止,他们的技术支持非常出色。