У меня есть проект с настройкой Wix, и я пытаюсь найти способ не включать каждую зависимость вручную, как я это делаю, в кучу разных проектов.Создание зависимостей с гидами для Wix с использованием командного файла
Я пытаюсь использовать пакетный файл на предварительной сборке, которая выглядит как
@echo off
set TARGETDIRECTORY=%1
set OUTPUTFILE=%2
set PROJDIR=%3
echo Starting Dependency check...
echo ^<?xml version="1.0" encoding="UTF-8"?^> > %OUTPUTFILE%
echo ^<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"^> >> %OUTPUTFILE%
echo ^<Fragment^> >> %OUTPUTFILE%
echo ^<ComponentGroup Id="MyWebApiBinaries" Directory="INSTALLFOLDER"^> >> %OUTPUTFILE%
for %%F in (%TARGETDIRECTORY%\*.dll) do (
echo "-- Adding %%~nxF"
echo "-- Calling %PROJDIR%Uuidgen.Exe"
%PROJDIR%Uuidgen.Exe> %PROJDIR%temp.txt
set /p aGUID=<%PROJDIR%temp.txt
del %PROJDIR%temp.txt
echo "-- Adding %aGUID%"
echo ^<Component Id="%%~nxF" Guid="%aGUID%"^> >> %OUTPUTFILE%
echo ^<File Id="%%~nxF" Name="%%~nxF" Source="%%~dpnxF" Vital="yes" KeyPath="yes" DiskId="1"/^> >> %OUTPUTFILE%
echo ^</Component^> >> %OUTPUTFILE%
)
echo ^</ComponentGroup^> >> %OUTPUTFILE%
echo ^</Fragment^> >> %OUTPUTFILE%
echo ^</Wix^> >> %OUTPUTFILE%
echo Dependency check done.
Получил эту идею из this answer за исключением того, что мне нужно, чтобы добавить GUID, потому что я устанавливаю на Inetpub вместо Программные файлы. Поэтому я включил uuidgen.exe в проект для создания GUID. Я вызываю exe и отсылаю guid в файл temp, который я позже пытался прочитать, за исключением того, что он его не читает. Я пробовал этот подход в другом пакетном файле и вручную вызывал его, и он читал его, поэтому я не знаю, почему он здесь не работает. В основном я говорю об этих двух линий:
%PROJDIR%Uuidgen.Exe> %PROJDIR%temp.txt
set /p aGUID=<%PROJDIR%temp.txt
Я удалить удаления, чтобы проверить, что файл генерации GUID и создается, и именно там, так что я знаю, что бы быть вторая линия.
Я также попытался запустить
for /f %%i in ('"%PROJDIR%\Uuidgen.Exe"') do set GUID=%%i
вместо двух других линий, но я не получаю Guid от переменной
Я знаю, что он не получает там, потому что я добавил эхо с переменной, а также %OUTPUTFILE%
генерируется с помощью Guid = "" (только пустая строка/переменная). Любые идеи, почему он не получил руководство по переменной?
'Задержка вопрос expansion'. Я включил ответ о том, как решить эту проблему, не включив ее. Но вы должны уделять пристальное внимание другим сообщениям, поскольку «отложенное расширение» или «переменное расширение внутри блока» было задано много раз. Надеюсь, поможет. – elzooilogico
Почему вы не можете использовать автоматически созданные GUID, либо опуская атрибут guid, либо используя 'Guid =" * "'? Если вы когда-либо автоматически генерируете файл wxs для тех же компонентов снова, вы можете столкнуться с проблемами при обновлении в зависимости от того, где вы планируете removeexistingproducts –
@Brian Sutherland, потому что внешняя мудрая ошибка, я думаю, автоматически создаваемые подсказки работают только в папке программных файлов. Но ваша забота также верна, я не думал об этом сценарии – CPay