Wix: копирование файлов из настраиваемого действия в каталог программ (Windows 7)

Я создал управляемый CustomAction для копирования 2 файлов, не включенных в * .MSI, в каталог установки.

Хотя это работает в Windows XP, но не работает в Windows 7. Хотя в журнале указано, что файлы копируются в желаемое место C:\Program Files\MyApp\, на самом деле они копируются в C:\Users\MyUser\AppData\Local\VirtualStore\Program Files (x86)\MyApp\. Я предполагаю, что это связано с правами доступа на изменение папки программы.

Вот как я называю настраиваемое действие в WiX:

<CustomAction 
    Id='InstallSource'
    BinaryKey='SrcInstActionDll'
    DllEntry='InstallSourceFiles'
    Execute='deferred'
    Impersonate='no'/>
<CustomAction
    Id="InstallSource.SetProperty"
    Return="check"
    Property="InstallSource"
    Value='Files=[SourceDir]$(var.SourceZipName),[SourceDir]$(var.SymbolsZipName);TargetDir=[ParentFolder]'
    Execute='immediate'/>

Сам CustomAction просто вызывает File.Copy(). Другие файлы, скопированные установщиком, отлично работают в Windows 7. Только файлы, скопированные с помощью CustomAction, имеют описанную проблему.


person DanielB    schedule 07.07.2010    source источник


Ответы (2)


Действительно, такое поведение вызвано перенаправлением файловой системы, срабатывающим, когда 32-битное приложение (в 64-битной Windows), работающее от имени обычного пользователя, пытается выполнить запись в какую-то привилегированную папку.

На мой взгляд, ваше настраиваемое действие не выполняется с повышенными правами. Поскольку определение настраиваемого действия выглядит правильным, остается вопрос, где вы запускаете это настраиваемое действие.

Поскольку вы упомянули журнал, я предполагаю, что вы запускаете msiexec и проверяете журналы. Убедитесь, что ваше настраиваемое действие запускается после строки, которая выглядит так:

MSI (s) (BC:70) [13:34:10:669]: MSI_LUA: Elevation required to install product, will prompt for credentials
MSI (s) (BC:70) [13:34:59:528]: MSI_LUA: Credential Request return = 0x0
MSI (s) (BC:70) [13:34:59:528]: MSI_LUA: Elevated credential consent provided. Install will run elevated

Некоторое время назад у меня была аналогичная проблема с настраиваемыми действиями и это сообщение в блоге помогло мне понять, как это исправить. Это еще один пост, который, я думаю, может помочь

Надеюсь это поможет

person Vagaus    schedule 07.07.2010

Как вы сказали, я думаю, что ваше настраиваемое действие требует повышения. Поскольку ваш центр сертификации является проектом .Net, довольно просто настроить его для поддержки повышения уровня.

Пожалуйста, проверьте следующую ссылку, в ней есть хорошее объяснение того, как обрабатывать UAC в проекте .Net.

включение вашего-приложения -for-uac-on-vista

Надеюсь, это поможет.

person Mario    schedule 12.07.2010