我正在使用WIX安装程序。
在安装的一个步骤中,我想要询问用户管理员密码,然后使用用户给定的值设置环境变量ADM_PASSWD。稍后在下一步中,我将运行一个.bat文件来设置IIS服务器,为此我需要这个ADM_PASSWD。 p>
我知道运行一个.bat文件并不是一个好主意,这一切都很糟糕,但相信我,我别无选择。
我能够在读取变量和C#代码时设置它,我得到正确的值。
WIX代码:
<CustomAction Id="SetEnvVariableProperty"
Property="ADM_PASSWD"
Value="[PASSWORD]" />
<CustomAction Id="SetEnvVariable"
Return="check"
Execute="immediate"
BinaryKey="CustomActions.dll"
DllEntry="SetEnvVariable" />
<InstallExecuteSequence>
<Custom Action="CheckLicense" Before="InstallFinalize" />
<Custom Action="SetEnvVariableProperty" After="InstallFinalize"/>
<Custom Action="SetEnvVariable" Before="InstallFinalize"/>
<Custom Action="RunIISBat" Before="InstallFinalize"/>
</InstallExecuteSequence>
<CustomAction Id="RunIISBat"
FileKey="filERSDRC087ADD4D68354E59268F31A3"
ExeCommand=""c:\Program Files (x86)\App Location\""
Execute="deferred"
Return="asyncWait"
Impersonate="no"
/>
C#代码:
[CustomAction]
public static ActionResult SetEnvVariable(Session session)
{
session.Log("Setting Environement Variable");
String envName = "ADM_PASSWD";
string envValue = session["ADM_PASSWD"].ToString();
// Determine whether the environment variable exists.
if (Environment.GetEnvironmentVariable(envName) == null)
{
session.Log(envName + " Does not exist !");
// If it doesn't exist, create it.
Environment.SetEnvironmentVariable(envName, envValue);
session.Log("Setting ADM PASSWD To : " + envValue);
session.Log(envName + " created !");
}
session.Log(Environment.GetEnvironmentVariable(envName).ToString());
session.Log("Done Setting Environement Variable");
return ActionResult.Success;
}
但不知何故,我的.bat文件没有获得该变量。我不知道它是否被删除了?