InstallShield - 相对文件路径

Cor*_*nel 28 windows-installer installshield filepath

如何将文件添加到InstallShield组件,指定InstallShield项目的相对路径,以便在不同的计算机上轻松编译项目?

bvj*_*bvj 31

使用免费的VS限制版InstallShield,设置自定义路径看起来不太可能.因此只需要几个预定义的路径选项就可能需要黑客攻击ISL文件.

以下是我在2013 Express文档中找到的预定义路径变量:(如果是拼写错误,请进行验证)

    Predefined Path                              Variable Value                       InstallScript Path Variable
    --------------------------------------------------------------------------------------------------------------
    <ProgramFilesFolder>                         C:\Program Files\                    <PROGRAMFILES>
    <CommonFilesFolder>                          C:\Program Files\Common Files\       <COMMONFILES>
    <WindowsFolder>                              C:\Windows\                          <WINDIR>
    <SystemFolder>                               C:\Windows\System32\                 <WINSYSDIR>
    <ISProjectFolder>                            C:\InstallShield 2013 Projects\      
    <ISProjectDataFolder>                        <ISProjectFolder>\ProjectName        <ISPROJECTDIR>
    <ISProductFolder>                            C:\Program Files\InstallShield\2013  
    <ISRedistPlatformDependentFolder>            C:\Program Files\InstallShield\2013\
                                                    .\Redist\Language Independent\i386
    <ISRedistPlatformDependentExpressFolder>     C:\Program Files\InstallShield\2013\
                                                    .\Redist\Language Independent\
                                                    .\i386 Express
Run Code Online (Sandbox Code Playgroud)

我的VS解决方案包括Outlook AddIn和InstallShield LE安装项目.虽然InstallShield包含AddIn生成的输出和相关程序集,但是清单和vsto文件都没有包含在内.所以我需要单独指定这些.这适用于一个工作站; 但是,共享解决方案的另一个工作站具有不同的源目录结构,从而提供未解析的源.

InstallShield使用绝对路径添加了manifest和vsto文件.所有工作站共有的符号链接可以解决问题,但我决定破解ISL文件以查看是否可以使用相对路径来实现ISL文件,将来可能需要维护黑客.

为了获得公共父目录(即我的情况下的解决方案目录),我在ISL中为<table name ="File">中列出的特殊工件指定了以下两个父选择器(..\..).

...<td>&lt;ISPROJECTDIR&gt;..\..\MyProject\bin\Release\...
Run Code Online (Sandbox Code Playgroud)

其中HTML实体用于<ISPROJECTDIR>变量的周围小于/大于符号.

我使用<ISPROJECTFOLDER>变量而不是<ISPROJECTDIR>运行了第二次测试(应该是第一次测试).在此测试中,只需要一个父选择器:

...<td>&lt;ISPROJECTFOLDER&gt;..\MyProject\bin\Release\...
Run Code Online (Sandbox Code Playgroud)

到目前为止,事情似乎正确解决,但你的相对性可能会有所不同.

  • 这是我找到的最佳解决方案,尤其是当您添加不属于项目的文件时.我使用相对变量<VSSolutionFolder>(替换<with&lt;和> with&gt;)而不是.sln目录. (6认同)

Dro*_*ror 17

您可以使用<path variables>(参见文档 - 从Wayback,2018年8月复活)将所有文件指向它们.
另请参阅此博客文章.


Mat*_*lly 13

<ISProjectFolder> 是包含Install Shield项目的目录的宏.

(在这个页面上更容易得到答案......)