InstallShield - 相对文件路径

29

我该如何将一个文件添加到InstallShield组件中,并指定相对路径到InstallShield项目,以便在不同的机器上容易编译项目?

6个回答

32

使用免费的InstallShield VS Limited Edition,设置自定义路径似乎不可能。因此,在仅有几个预定义路径选项可用的情况下,可能需要修改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

我的VS解决方案包括Outlook AddIn和InstallShield LE安装项目。虽然InstallShield包含了AddIn生成的输出和相关程序集,但是清单和vsto文件都没有被包含。所以我需要单独指定这些文件。这对一个工作站有效,但是另一个共享该解决方案的工作站有不同的源目录结构,导致源文件无法解析。

InstallShield使用绝对路径添加了清单和vsto文件。一个符号链接可以解决所有工作站的问题,但我决定修改ISL文件,看看是否可以使用相对路径来实现。我意识到ISL文件可能需要维护。

为了获取共同的父目录(即我的情况下的解决方案目录),我在ISL中为特定工件列表<表格名称="文件">指定了以下两个父选择器(..\..)。

...<td>&lt;ISPROJECTDIR&gt;..\..\MyProject\bin\Release\...

HTML实体用于包围<ISPROJECTDIR>变量的尖括号符号。

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

...<td>&lt;ISPROJECTFOLDER&gt;..\MyProject\bin\Release\...

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


7
这是我找到的最佳解决方案,尤其是当您添加不属于项目的文件时。我使用相对变量<VSSolutionFolder> (将<替换为< ,将>替换为>)代替.sln目录。 - Chris R

17

1
请参见下面@bvj提供的答案,应标记为完整性的正确答案。 - Chris R
@Dror 它能与InstallShield限制版一起使用吗? - Eldho
@Eldho,不确定-请查看此问题:https://dev59.com/E2_Xa4cB1Zd3GeqP25vE - Dror
@Eldho,希望你现在已经解决了问题,但如果没有,请看看我在这个主题中关于限量版的帖子。 - bvj

13

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

(在此页面上得到答案要容易得多...)


1
为了确保人们在直接编辑项目文件(.isl)时不会感到困惑,您需要使用转义符号来表示<和>。实际变量是<ISProjectFolder>。 - Miro J.
谢谢。这就是我想要的。 - Abhishek

4
  • 修正了在Install Shield Limited Edition中将文件内容复制到输出目录的固定相对路径(Visual Studio 2012)
  • 步骤:
  • 在“解决方案资源管理器”中展开您的安装项目,以便看到1、2、3、4、5、6部分
  • 展开“2”并双击“文件”
  • 您将看到一个四面板页面:“源计算机文件”和“目标计算机文件”
  • 从“目标计算机文件”中删除硬编码的路径和文件
  • 在左上角面板中,单击具有您的文件作为“内容文件”的项目
  • 右上角面板将显示“MyProject的内容文件”
  • 单击并将其拖动到右下角面板(即“目标计算机文件”)

返回到您的项目并确保您想要复制的所有文件都具有以下属性: Build Action = Content 和 Copy to output directory = Copy Always


比编辑项目文件要好得多;Build Action=Content 是我所缺少的。请注意,如果安装程序包含不需要的文件,请检查它们的 Build Action 是否设置为“None”。您可以通过右键单击 -> 解析“我的项目内容文件”条目上的项目输出来查看将要复制哪些文件。 - personne3000

1
以下是我的解决方案,如果您的“源文件”的磁盘分区与<ISProjectFolder>不同:
  1. 使用记事本打开安装脚本文件(*.isl);
  2. 了解预定义变量“<VSSolutionFoler>”,它是您的安装解决方案文件夹的文件夹
  3. 将文件的绝对路径替换为相对于“解决方案文件夹”的路径。即 & lt;VSSolutionFolder& gt;..\..\exe\release\myapp.exe

1

当你添加文件时,应尝试使其相对于InstallShield项目文件。如果您将.ism文件保留在源代码树中,则添加的任何可执行文件都应该相对于该文件的路径。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接