【问题标题】:python script to send a variable to wix source pathpython脚本将变量发送到wix源路径
【发布时间】:2013-03-16 05:19:46
【问题描述】:

我有一个使用wxpython 生成的GUI,用于选择wix 项目创建msi 所需的路径。当点击 GUI 中的 apply 按钮时,从 GUI 中选择的路径被写入注册表。选择的路径存储在一个变量中,比如 data 即:

data='C :\Sandbox\build\Windows\release\my.exe

以及写入注册表,即:

HKEY_CURRENT_USER\Software\Automation\myapp

现在我开发了 wix 项目来使用 msbuild 创建 msi。我希望 GUI 中的选定路径必须进入 wix 组件中的源路径。我的 wix 代码有点像下面,

<Component Id='MainExecutable' Guid='*'>
    <File Id='ExecutableFile' Name='my.exe' DiskId='1' Source='$(var.Sandbox)\my.exe' KeyPath='yes' Checksum='yes'/>
</Component>

使用上面的代码,我得到一个错误提示,

 error CNDL0150: Undefined pre processor variable '$(var.Sandbox)'

如何将 GUI 选择的变量“数据”传递到 wix 中的文件源路径?是否可以将注册表值发送到 wix?

【问题讨论】:

    标签: python python-2.7 wix wix3.7


    【解决方案1】:

    当您调用candle.exe 时,您需要通过名为Sandbox 的预处理器变量传递data 变量。您可以使用如下所示的 sn-p 行来做到这一点:

    from subprocess import call
    call(["candle.exe", "-dSandbox=" + data])
    

    当然,您还需要添加 .wxs 文件的路径等等。

    【讨论】:

    • 尝试使用您的代码。出现如下错误 WindowsError: [错误 2] 系统找不到指定的文件
    • 我的代码是一个sn-p。您需要提供其余代码(包括要编译的文件和输出文件夹,如果您要指定的话)以使其工作。
    【解决方案2】:

    将 python 脚本中的变量“数据”作为 msbuild 属性传递给 wix。Python 脚本如下所示

    data='C:\Sandbox\build\Windows\release\my.exe'
    arg1 = '/t:Rebuild'
    arg2 = '/p:Configuration=Release'
    arg3 = '/p:Platform=x86'
    arg4 = '/p:ExePath=data'
    p = subprocess.call([self.msbuild,projpath,arg1,arg2,arg3])
    

    并在您的 wixproject 中进行更改,如下所示。

    <PropertyGroup>
        <DefineConstants>
        Sandbox=$(ExePath)
        </DefineConstants>
    </PropertyGroup>
    

    并在您的 wxs 文件中更改组件的源路径,如下所示

    <Component Id='MainExecutable' Guid='*'>
    <File Id='ExecutableFile' Name='my.exe' DiskId='1' Source='$(var.Sandbox)\my.exe' KeyPath='yes' Checksum='yes'/>       
    </Component>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-09
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多