获取dir setup安装盾牌

时间:2017-12-27 06:42:00

标签: installation windows-installer installshield installscript installscript-msi

我想通过安装盾获取我的设置。 我使用命令参数Setup.exe /path=[SETUPEXEDIR]\log.txt 我的设置位置为Desktop\myapp\Setup.exe 当使用[SETUPEXEDIR]返回临时文件夹时 我想在使用[SETUPEXEDIR]时返回我的Setup.exe位置。

我使用installshield 2016版本23 SP 2。 我使用MSI Script。

我想获取位置并在命令参数先决条件中使用。

1 个答案:

答案 0 :(得分:2)

有点难以理解你在问什么,但据我所知你想知道setup.exe的运行位置?

变量

  • 第一个问题是:您使用的是什么版本的Installshield

  • 第二个问题是:您使用基本MSI 还是 Installscript MSI

  • 第三个问题是:您使用的是什么类型的发布媒体

  • 可能有更多相关问题......

明智的话:如果您确实使用的是Installscript MSI,您应该知道它是一个非常错误的项目类型,您应该认真考虑切换到基本MSI以避免悲伤。如果您愿意,我可以提供更多相关信息。我不得不完全抛弃Installscript MSI,以免我的部署问题消失。

Installshield属性

似乎不同版本的Installshield可能表现不同,并且对这些文件夹属性/变量具有不同的支持。它似乎也可能不适用于所有类型的发布媒体。最后它们可能只分别在Basic MSI或Installscript MSI中工作。我找到的属性包括:PACKAGE_LOCATIONSETUPEXEDIRSRCDIR。在最新版本的Installshield中似乎也有一个名为GetCurrentDir()的Installscript方法,但文档警告使用它(请参阅链接)。

请按顺序访问上面的链接,并详细了解每个属性(或方法的限制)。使用符合您的要求和方案的选项(如果有)非常重要。例如,PACKAGE_LOCATION仅适用于Installscript MSI,SETUPEXEDIR由Setup.exe设置。如果最终用户直接运行.msi包,则不会设置SETUPEXEDIR。

MSI内置属性

在我看来,获取内置的MSI属性 SourceDir 可能是一个尝试的选项。我的快速测试表明它适用于InstallScript和Basic MSI。但是,我不知道这是否适用于所有版本的Windows Installer。请测试各种Windows版本。

您还应该了解使用the documentation for SETUPEXEDIR中描述的SourceDir的潜在问题。这适用于编译为包含所有文件的单个压缩setup.exe的设置 - 此启动程序将MSI文件解压缩到临时位置并从那里运行。当我尝试使用未压缩的网络图像时,可以正常使用SourceDir。

最后,如果您使用setup.exe来压缩所有文件并在系统上启用MSI的缓存,那么您将从内部的某个位置运行:C:\WINDOWS\Downloaded Installations\{GUID}\

所有这些在较新版本的Installshield上可能会有所不同。我正在测试我可用的古代版本。请仔细测试您的版本。

我还应该提到OriginalDatabase内置的MSI属性。查看链接以获取有关如何设置的文档。

一些链接:

用于测试的Installscript函数

仅供参考,这是一个快速而又脏的功能,可以从Installshield自定义操作中测试这些属性(这适用​​于其他人,如果没有像您那样进行测试,可以找到它):

function TestFolderProperties(hMSI)   
     STRING svName;
     NUMBER nvSize;
begin             

    // MSI properties
    nvSize = 256;
    MsiGetProperty (hMSI, "SETUPEXEDIR", svName, nvSize);
    MessageBox ("SETUPEXEDIR: " + svName, INFORMATION);
    MsiGetProperty (hMSI, "SourceDir", svName, nvSize);
    MessageBox ("SourceDir: " + svName, INFORMATION);
    MsiGetProperty (hMSI, "OriginalDatabase", svName, nvSize);
    MessageBox ("OriginalDatabase: " + svName, INFORMATION);

    // System Variables
    MessageBox ("SRCDIR: " + SRCDIR, INFORMATION);
    // PACKAGE_LOCATION is not available in my version of Installshield, enable and test 
    //MessageBox ("PACKAGE_LOCATION: " + PACKAGE_LOCATION, INFORMATION);
end;

请记住将导出添加到setup.rul文件的顶部:

export prototype TestFolderProperties(HWND);  

测试编译以进行验证,然后创建一个Installscript自定义操作并将其放入序列中。制作"退货处理"自定义操作的同步(忽略退出代码)。我在序列中的InstallFinalize之前使用立即模式执行。重建您的版本并运行它。尝试不同的发布版本配置(msi包含外部源文件,MSI仅包含内部压缩文件,setup.exe启动器包含外部文件,setup.exe包含所有压缩文件,setup.exe包含缓存,setup.exe没有缓存等。 ..行为可能不同)。