wpf 如何将installationpath作为参数传递到使用WIX制作的MSI文件

mrfwxfqh  于 2023-06-24  发布在  其他
关注(0)|答案(2)|浏览(155)

我用Windows Installer XML生成了一个MSI文件,所选对话框集是“WixUI_Advanced”。然后,我想从WPF窗口启动MSI单击一个按钮,并将安装路径作为参数传递给MSI。所以我使用下面的代码来启动MSI:

Process proc = new Process();
   proc.StartInfo.FileName = "msiexec";
   string filePath = "C:\\experimente\\WpfTestApplication\\TestSetup\\bin\\Debug\\TestSetup.msi";
   proc.StartInfo.Arguments = @"/i " + filePath + " INSTALLATIONPATH=C:\\workspace";
   proc.Start();

在WIX项目的Product.wxs中,i定义了INSTALLATIONPATH属性:
C:\安装
稍后,我尝试在Id中设置给定的参数,其中通常代表“ProgramFilesFolder”:

<Directory Id="TARGETDIR"
               Name="SourceDir">
        <Directory Id="INSTALLATIONPATH">
            <Directory Id="APPLICATIONFOLDER"
                       Name="TestApplication">
            </Directory>
        </Directory>
    </Directory>

当我启动我的WPF-App并按下按钮时,MSI启动,但安装路径仍然是programfiles文件夹。谁能告诉我,我做错了什么?
先谢谢你,帕特里克

mlnl4t2r

mlnl4t2r1#

这是安静的简单-如果你知道它!
在MSI项目和应用程序旁边,您需要一个名为p.e.的 Bootstrap 项目。“BootstrapperSetup”。在Bundle.wxs中您写道:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
    <Bundle Name="ProsoftSetupForTest" Version="1.0.0.0" Manufacturer="prosoft GmbH" UpgradeCode="b6f80b17-7a36-425c-a1e5-9c9e7e500da2">
        <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />

        <Variable Name="INSTALLFOLDER"
                  bal:Overridable="yes"
                  Type="string"
                  Value="[ProgramFilesFolder]"/>

        <Chain>
            <MsiPackage Vital="yes"
                        DisplayName="<The setup identifier for the program registry>"
                        Id="MsiId"
                        SourceFile="<The path of Your MSI">
                <MsiProperty Name="TARGETDIR"
                             Value="[INSTALLFOLDER]\MyFolder" />
            </MsiPackage>
        </Chain>
    </Bundle>
</Wix>

在您的MSI的Product.wxs中,您有一个TARGETDIR条目,如下所示:

<Directory Id="TARGETDIR"
    Name="SourceDir">
</Directory>

然后你重建你的解决方案,在Windows资源管理器中转到你的 Bootstrap 项目的Debug文件夹,启动DOS窗口并设置如下命令:

BootstrapperSetup.exe INSTALLFOLDER=C:\TestInstallation

就这样!

kmbjn2e3

kmbjn2e32#

<?xml version="1.0" encoding="UTF-8"?>
<Variable Name="INSTALLFOLDER"
                     bal:Overridable="yes"
                     Type="string"
                     Value="[InstallFolder]"/>

    <Chain>
       <MsiPackage Id="Id"
            SourceFile="MSI path"
            DisplayName="Title"
            Vital="yes"
            Visible="no">
             <Payload SourceFile="msi Path" />
        <MsiProperty Name="INSTALLFOLDER" Value="[InstallFolder]" />
        </MsiPackage>
    </Chain>
</Bundle>

相关问题