Installshield 未正确读取 PowerShell 脚本之前设置的环境变量
Posted
技术标签:
【中文标题】Installshield 未正确读取 PowerShell 脚本之前设置的环境变量【英文标题】:Installshield is not correctly reading an Environment Variable set earlier by a PowerShell script 【发布时间】:2021-10-14 00:53:32 【问题描述】:我正在从 InstallShield 调用 PowerShell 脚本 - 该脚本设置了两个环境变量,每个变量都包含已安装文件的文件版本
PS 脚本包含
$fileversion1 = (Get-Command '<File1>').FileVersionInfo.FileVersion
[Environment]::SetEnvironmentVariable("File_Version_Installed_VCS",$fileversion1,"Machine")
$fileversion2 = (Get-Command '<File2>').FileVersionInfo.FileVersion
[Environment]::SetEnvironmentVariable("File_Version_Installing_VCS",$fileversion2,"Machine")
它是通过Installshield脚本调用的
My_AddToLog("Start - set up execution permissions for PowerShell Scripts");
__LaunchAppAndWait("powershell"," Set-ExecutionPolicy bypass");
: // Other lines of code, then later
__LaunchAppAndWait("powershell",".\\GetFileVersion.ps1");
: // Other lines of code, then later
if !(GetEnvVar("File_Version_Installed_VCS",sv_Installed_VCS_version ) < 0) then
if !(GetEnvVar("File_Version_Installing_VCS",sv_Installing_VCS_version) < 0) then
nvResult = StrCompare (sv_Installing_VCS_version,sv_Installed_VCS_version);
:// other lines of code
else
My_AddToLog("File_Version_Installing_VCS envar not defined - cannot compare versions. Do
not overwrite Installed VCS version");
else
My_AddToLog("File_Version_Installed_VCS envar not defined - cannot compare versions. Do
not overwrite Installed VCS version");
endif;
第一次运行程序时,我通过日志文件验证了这些环境变量是由 PS1 脚本设置的(之前也检查过 Envars 以前不存在),并且这是在稍后检查之前完成的环境变量上就搞定了。查看日志文件输出
8-10-2021 12:41:18 - Start - set up execution permissions for PowerShell Scripts 8-10-2021 12:41:18 - Executing Command powershell Set-ExecutionPolicy bypass 8-10-2021 12:41:27 - Command SUCCESS : 8-10-2021 12:54:10 - Executing Command powershell .\GetFileVersion.ps1 8-10-2021 12:54:20 - Waiting for Command to Complete 8-10-2021 12:54:27 - Command SUCCESS :
而且我还检查了这个时候(大约)设置了 envars 但后来
8-10-2021 12:56:06 - File_Version_Installed_VCS envar 未定义 - 无法比较版本。不要覆盖已安装的 VCS 版本
但是,在程序终止后,当我再次运行程序时,这一次会正确检测到 envar(使用上次运行时设置的值)。 所以这看起来是一个时间问题 - installshield GetEnvVar 调用似乎无法检测到环境变量,即使它们之前设置了大约 1.5 秒。我已经尝试在 envars 的设置和随后的读取它们之间增加进一步的延迟,但这没有区别。我相信 GetEnvVar 将不得不打开一个 CMD 窗口来读取环境变量,并且不知何故这无法读取先前设置的值 - 这只能在启动新程序运行时工作。 任何关于如何克服这一点的想法将不胜感激。提前致谢。
【问题讨论】:
我的 PowerShell 脚本的内容未正确显示。他们是 行是 $fileversion1 = (Get-Command "file1").FileVersionInfo.FileVersion [Environment]::SetEnvironmentVariable("File_Version_Installed_VCS",$fileversion1,"Machine") 【参考方案1】:$fileversion1 = (Get-Command '').FileVersionInfo.FileVersion [System.Environment]::SetEnvironmentVariable("File_Version_Installed_VCS",$fileversion1,[System.EnvironmentVariableTarget]::Machine) $fileversion2 = (Get-Command '').FileVersionInfo.FileVersion [System.Environment]::SetEnvironmentVariable("File_Version_Installing_VCS",$fileversion2,[System.EnvironmentVariableTarget]::Machine)
【讨论】:
以上是关于Installshield 未正确读取 PowerShell 脚本之前设置的环境变量的主要内容,如果未能解决你的问题,请参考以下文章
Installshield2015 定制安装在C:Program files 目录 不正确问题