Как получить папку приложения в WIX Toolkit для установки сервиса - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь написать установщик для стороннего приложения.Служба должна быть установлена ​​и запущена с аргументами.Один из аргументов - это домашняя папка, в которой была установлена ​​служба.

Как я могу прочитать папку, в которой было установлено приложение, и передать ее в Wix Element: ServiceInstall в качестве аргументов.

                <ServiceInstall Id="SInstall"
                        Type="ownProcess"
                        Name="myservice"
                        DisplayName="MyService"
                        EraseDescription="no"
                        Start="demand"
                        ErrorControl="normal"
                        Arguments="-folder '[INSTALLDIR]\config.txt'>

Но [INSTALLDIR] пусто;Я полагаю, что это должно быть сделано с помощью SetProperty и прочитать его, но не могу найти никаких ссылок, как это сделать.

    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFiles64Folder">
                <Directory Id="ManufacturerFolder" Name="OEM_XXX">
                    <Directory Id="INSTALLFOLDER" Name="Product  $(var.ProductVersion)">
                        <Directory Id="DirA" />
                        <Directory Id="DirB" Name="SubService">
                            <Directory Id="DirC" Name="ComponentA">
                                <Directory Id="ComponentB" Name="content" />
                            </Directory>
                        </Directory>
                    </Directory>
                </Directory>
            </Directory>
        </Directory>
    </Fragment>
    <Fragment>
        <DirectoryRef Id="DirB">
            <Component Id="Svc1" Guid="b033eb95-ce88-48ac-b40f-6913c5e4b978" Win64="yes">
                <File Source="$(var.SourceDir)\service.exe" />

                    <ServiceInstall Id="SInstall"
                        Type="ownProcess"
                        Name="myservice"
                        DisplayName="MyService"
                        EraseDescription="no"
                        Start="demand"
                        ErrorControl="normal"
                        Arguments="-folder '???????\config.txt'>

                     <ServiceConfig DelayedAutoStart="no" OnInstall="yes" OnReinstall ="yes" />

                </ServiceInstall>

                <ServiceControl Id="SControl"
                        Stop="both"
                        Remove="uninstall"
                        Name="myservice"
                        Wait="no" />                
            </Component>
        </DirectoryRef>
    </Fragment>

Спасибо.

1 Ответ

0 голосов
/ 26 февраля 2019

Используйте [{directoryId} в качестве ссылки;

В моем случае это было

 <ServiceInstall Id="SInstall"
                        Type="ownProcess"
                        Name="myservice"
                        DisplayName="MyService"
                        EraseDescription="no"
                        Start="demand"
                        ErrorControl="normal"
                        Arguments='-folder "[DirB]config.txt"'>

Полный список доступных системных папок вы можете найти на MSDN:

https://docs.microsoft.com/en-us/windows/desktop/msi/property-reference#system-folder-properties

Иногда имена могут сбить вас с толку, но прочитать описание.Например, если вы хотите определить путь к% PROGRAMDATA%, вы должны использовать [CommonAppDataFolder]

PS Встроенные переменные заканчиваются косой чертой

...