Справочная информация: клиент изменил название приложения. Приложение хранит файлы в папке AppData, и теперь эту папку необходимо скопировать под новым именем (и удалить старое).
У меня установлена сборка MSI с Wix 3.6. Я не нашел стандартного способа копирования папки (только файл). Поэтому я пытался создать пользовательское действие, которое использует команду xcopy, но это кажется очень сложным.
Если я немедленно создаю CA и планирую его после InstallFinalize, это работает на WinXP, но на Win7 только при запуске MSI от имени администратора.
Если я делаю отложенный CA, я получаю сообщение об ошибке отказа в доступе. Эта ошибка возникает даже тогда, когда я проверял, чтобы скопировать из и в папку в папке пользователя. Но отложенный CA завершается успешно, если я проверяю его с помощью команды echo.
<CustomAction Id="CopyFolder_PropertyAssign" Property="CopyFolder"
Value=""[SystemFolder]cmd.exe" /c xcopy
"[$(var.PlatformCommonAppDataFolder)]OldName"
"[$(var.PlatformCommonAppDataFolder)]NewName"
/s /i /h /k /o /y" />
<CustomAction Id="CopyFolder" BinaryKey="WixCA" DllEntry="CAQuietExec"
Execute="deferred" Return="check" Impersonate="no" />
<Custom Action="CopyFolder_PropertyAssign" Before="InstallFinalize"></Custom>
<Custom Action="CopyFolder" After="CopyFolder_PropertyAssign"></Custom>
CAQuietExec: Access denied
CAQuietExec: Error 0x80070004: Command line returned an error.
CAQuietExec: Error 0x80070004: CAQuietExec Failed
На самом деле должно быть что-то еще, кроме запрета доступа, потому что то же самое происходит и в папке пользователя, но что это за земля?
Или есть ли другие решения для этого (помимо создания exe-пакета)?
EDIT:
Папка находится под всеми пользовательскими данными приложения.
EDIT:
Это кажется невозможным. Выбранный обходной путь заключался в том, чтобы создать немедленный центр сертификации и направить пользователей к запуску установщика с правами администратора (или так должно быть в большинстве случаев). В любом случае спасибо за помощь!