我有大约6到7个应用程序包含网站和打包到一个捆绑包中的Windows服务,为此我开发了带有WPF引导程序应用程序的自定义UI,我需要从用户那里获取一些输入,如虚拟目录名,安装位置,SQL凭据等。
现在的问题是当我尝试从wpf Ui设置虚拟目录名并通过设置msi属性从bundle传递到msi时,msi中的属性没有更新
以下是我的代码段
在product.wxs中,我已经定义了属性和目录结构,如下所示
<Property Id="TARGETDIRECTORY" Value="test"/>
<Directory Id='TARGETDIR' Name='SourceDir'>
<Directory Id="IISROOT" Name='WebDir'>
<Directory Id='INSTALLDIR' Name='[TARGETDIRECTORY]'>
在bundle.wxs中
<Variable bal:Overridable="yes" Name="TargetDirectory" Value="test"/>
<MsiPackage Id="TESTSERVER" SourceFile="$(var.Gac.TEST.Setup.Server.TargetPath)" Visible="yes" DisplayInternalUI="no">
<MsiProperty Name="TARGETDIRECTORY" Value="[TargetDirectory]"/>
</MsiPackage>
在Bootstraper中
engine.StringVariables["TargetDirectory"] = "XYZ";
安装时,虚拟目录的名称为TARGETDIRECTORY,而不是xyz。我是wix的新手,任何人都可以指导我实现这一目标,请让我知道我在哪里做错了
答案 0 :(得分:0)
I pass some of the properties from cmd , and some i read from xml document and set them.
using (var p = new Process())
{
var info = new ProcessStartInfo
{
WindowStyle = ProcessWindowStyle.Hidden,
FileName = @"C:\Windows\System32\cmd.exe",
Arguments = string.Format("/c msiexec /i \"{0}\\{6}.msi\" PATHNAME=\"{0}\" SSLCERTPATH=\"{1}\"" +
" MSINEWINSTANCE=1 TRANSFORMS=\":{2}\" USERPATH={3} ENVIRONMENTPATH={4} SSLCERTPASS=\"{5}\" /L*v \"{0}\\{6}Log.txt\""
, XmlSettings.EnvironmentFolderPath, FindCertificates.SslCertPath, environment, XmlSettings.IisUserFolderPath,
XmlSettings.EnvironmentFolderPath, FindCertificates.SslCertPass, msiName),
UseShellExecute = false,
CreateNoWindow = true
};
p.StartInfo = info;
p.Start();
p.WaitForExit();
}
答案 1 :(得分:0)
现在我可以使用自定义操作设置INSTALLDIR名称。
在自定义操作中,我正在设置xml所需的属性值