我想通过安装盾获取我的设置。
我使用命令参数Setup.exe /path=[SETUPEXEDIR]\log.txt
我的设置位置为Desktop\myapp\Setup.exe
当使用[SETUPEXEDIR]返回临时文件夹时
我想在使用[SETUPEXEDIR]时返回我的Setup.exe位置。
我使用installshield 2016版本23 SP 2。 我使用MSI Script。
我想获取位置并在命令参数先决条件中使用。
答案 0 :(得分:2)
有点难以理解你在问什么,但据我所知你想知道setup.exe的运行位置?
第一个问题是:您使用的是什么版本的Installshield ?
第二个问题是:您使用基本MSI 还是 Installscript MSI ?
第三个问题是:您使用的是什么类型的发布媒体?
可能有更多相关问题......
明智的话:如果您确实使用的是Installscript MSI,您应该知道它是一个非常错误的项目类型,您应该认真考虑切换到基本MSI以避免悲伤。如果您愿意,我可以提供更多相关信息。我不得不完全抛弃Installscript MSI,以免我的部署问题消失。
似乎不同版本的Installshield可能表现不同,并且对这些文件夹属性/变量具有不同的支持。它似乎也可能不适用于所有类型的发布媒体。最后它们可能只分别在Basic MSI或Installscript MSI中工作。我找到的属性包括:PACKAGE_LOCATION,SETUPEXEDIR和SRCDIR。在最新版本的Installshield中似乎也有一个名为GetCurrentDir()的Installscript方法,但文档警告使用它(请参阅链接)。
请按顺序访问上面的链接,并详细了解每个属性(或方法的限制)。使用符合您的要求和方案的选项(如果有)非常重要。例如,PACKAGE_LOCATION仅适用于Installscript MSI,SETUPEXEDIR由Setup.exe设置。如果最终用户直接运行.msi包,则不会设置SETUPEXEDIR。
在我看来,获取内置的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属性。查看链接以获取有关如何设置的文档。
一些链接:
仅供参考,这是一个快速而又脏的功能,可以从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没有缓存等。 ..行为可能不同)。