python脚本将变量发送到wix源路径

时间:2013-03-16 05:19:47

标签: python python-2.7 wix wix3.7

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

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

以及写入注册表,即:

HKEY_CURRENT_USER\Software\Automation\myapp

现在我开发了使用msbuild创建msi的wix项目。我希望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选择的变量'data'传递给wix中的文件源路径?是否可以将注册表值发送给wix?

2 个答案:

答案 0 :(得分:1)

将python脚本中的变量'data'作为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>

答案 1 :(得分:0)

当您致电candle.exe时,您需要通过名为data的预处理程序变量传递Sandbox变量。您可以使用类似于以下内容的代码段行执行此操作:

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

当然,您需要添加.wxs文件的路径以及所有这些。