скрипт python для отправки переменной в исходный путь wix

У меня есть графический интерфейс, созданный с использованием wxpython, который используется для выбора пути, требуемого проектом wix для создания msi. Выбранный путь из графического интерфейса записывается в реестр при нажатии кнопки применить в графическом интерфейсе. Выбранный путь сохраняется в переменной, например data, т.е.:

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

а также записаны в реестр, т.е.:

HKEY_CURRENT_USER\Software\Automation\myapp

Теперь у меня есть проект wix, разработанный для создания msi с использованием msbuild. Я хочу, чтобы выбранный путь в графическом интерфейсе перешел в исходный путь в компоненте 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)'

Как я могу передать переменную «данные», выбранную графическим интерфейсом, в путь к исходному файлу в wix? Можно ли отправить значение реестра в wix?


person Aramanethota    schedule 16.03.2013    source источник


Ответы (2)


Когда вы вызываете candle.exe, вам нужно передать переменную data через переменную препроцессора с именем Sandbox. Вы делаете это с помощью строки фрагмента, которая выглядит примерно так:

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

Конечно, вам нужно будет добавить путь к вашему файлу .wxs и все такое.

person Rob Mensching    schedule 16.03.2013
comment
Пробовал с вашим кодом. Получение ошибки, как показано ниже WindowsError: [Ошибка 2] Система не может найти указанный файл - person Aramanethota; 18.03.2013
comment
Мой код представляет собой фрагмент. Вам нужно будет предоставить остальную часть кода (включая файлы для компиляции и выходную папку, если вы собираетесь указать это), чтобы он работал. - person Rob Mensching; 18.03.2013

Передайте переменную «данные» из скрипта Python в wix в качестве свойства msbuild. Скрипт 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>
person Aramanethota    schedule 22.03.2013