0

我有一个必须维护的 Installshield Installscript MSI 安装程序。它在 Support Files/Billboards 中包含大约 10 个文本文件。当安装程序运行时,我使用以下代码在自定义 Installscript 函数中打开文件进行编辑/复制:

打开文件(nvReadFileHandle,SUPPORTDIR,LOGGER_PRM)

这段代码已经完美地运行了大约一千次安装,其中许多都是安装程序的确切版本。然后,昨天,它第一次失败了。

查看 msi 日志后,我看到文件被提取到:

%TEMP%\3\ {GUID1}\ <-- 忽略空格

当上述代码执行时,SUPPORTDIR 的值为:

%TEMP%\ {GUID2}\ <-- 忽略空格

这以前从未失败过。那么为什么现在会发生呢?我能做些什么来修复它?当我用谷歌搜索问题时,我看到了相互矛盾的信息。考虑到具体情况,我宁愿不要反复试验 50 次以获得解决方案。

编辑:这里有更多信息。我刚刚发现我们正在安装的服务器是虚拟机的克隆。我怀疑使用的环境变量不正确。如果我们键入“cd %temp%”,它将转到上面的第一个目录。但是,如果我查看名为 TEMP 的环境变量,它们都指的是上面的第二个目录。

4

2 回答 2

2

使用以下命令获取 SUPPORTDIR:

nvBuffSize = MAX_SIZE;
MsiGetProperty( hMSI, "SUPPORTDIR", svSUPPORTDIR, nvBuffSize);
于 2013-11-15T21:26:06.943 回答
0

好吧,我想通了。这是发生的事情,以防其他人遇到此问题:

首先,我在http://social.technet.microsoft.com/Forums/windowsserver/en-US/01fc43a4-08b3-49c5-b265-60b819775194/temporary-directory-environment-variable-in-windows-server找到了我的答案-2008?forum=windowsserver2008r2general

如果链接断开,用户名为 triegler 的人会说:

“经过进一步研究,我发现了这一点:

http://technet.microsoft.com/en-us/library/cc755098.aspx

如果您为每个会话设置了临时文件夹,则会导致此行为。关闭它,注销,重新登录,你应该直接保存到你的根临时文件夹。

蒂姆”

于 2013-11-15T17:29:25.863 回答