Wix - изменить папку установки на основе привилегий - PullRequest
6 голосов
/ 19 июня 2009

Мне нужно создать установочный пакет с помощью Wix. Если пользователь-администратор устанавливает пакет, он должен быть установлен в% programfiles% / [applicationName], если пользователь не является администратором, он должен установить его в локальную папку профиля (LocalAppDataFolder).

Как это возможно?

Ответы [ 4 ]

4 голосов
/ 19 июня 2009

Я написал это для ClickThrough давным-давно. Исходя из этого, решение выглядит примерно так (вы предоставляете свойство с именем ApplicationFolderName):

    <Property Id="A" Secure="yes" />

    <DirectoryRef Id="TARGETDIR">
        <Directory Id="ApplicationFolder" Name="App" />
    </DirectoryRef>

    <Condition Message="Must specify TARGETDIR property when doing an administrative install.">Installed OR (ACTION="ADMIN" AND TARGETDIR&lt;&gt;"")</Condition>

    <CustomAction Id="TARGETDIRtoA" Property="A" Value="[TARGETDIR]" Execute="firstSequence" />

    <CustomAction Id="SpecifiedA" Property="ApplicationFolder" Value="[A]" Execute="immediate" />
    <CustomAction Id="PerMachineInstall" Property="ApplicationFolder" Value="[ProgramFilesFolder]\[ApplicationFolderName]" Execute="immediate" />
    <CustomAction Id="PerUserInstall" Property="ApplicationFolder" Value="[LocalAppDataFolder]\Apps\[ApplicationFolderName]" Execute="immediate" />

    <InstallUISequence>
        <Custom Action="SpecifiedA" Before="LaunchConditions">NOT Installed</Custom>
    </InstallUISequence>

    <InstallExecuteSequence>
        <Custom Action="PerMachineInstall" Before="CostFinalize">NOT Installed AND ACTION="INSTALL" AND A="" AND (ALLUSERS=1 OR (ALLUSERS=2 AND Privileged))</Custom>
        <Custom Action="PerUserInstall" Before="CostFinalize">NOT Installed AND ACTION="INSTALL" AND A="" AND (ALLUSERS="" OR (ALLUSERS=2 AND (NOT Privileged))</Custom>
    </InstallExecuteSequence>
2 голосов
/ 30 июня 2011

Переопределение свойства ProgramFilesFolder должно работать следующим образом:

<SetProperty Id="ProgramFilesFolder" Value="[AppDataFolder]" Before="CostFinalize"><![CDATA[ NOT Privileged]]></SetProperty>

<Directory Id="ProgramFilesFolder" Name="PFiles">
    <Directory Id="INSTALLDIR" Name="My Folder">
        ...
    </Directory>
</Directory>
0 голосов
/ 20 декабря 2011

Установить свойство ALLUSERS в 2. См. Также Однократная авторизация пакетов .

0 голосов
/ 07 марта 2011

ваш код не может работать на моем проекте wix В настоящее время я использую AdminUser = "1", чтобы судить, находимся ли мы под привилегией администратора

...