UnauthorizedAccessException: доступ к пути запрещен - PullRequest
0 голосов
/ 26 июня 2018

В рамках программы установки службы, использующей Wix 3.XX , мы пытались зашифровать строку подключения.После посещения нескольких опций в Stackoverflow и некоторых других сообществах, мы решили сделать это в трех частях.

  1. Установщик, который устанавливает службу в первой части
  2. В концепри установке он вызывает небольшой исполняемый файл, который выбирает место подключения существующего конфига, шифрует строку подключения в папке установки и сохраняет этот конфиг.
  3. A .bat файл, который очищает исполняемый файл для шифрования (в основномне оставляя следов)

Все три части хорошо работают с координацией, но исполняемый файл шифрования завершается неудачно, когда я пытаюсь установить его в " Program Files " или " Program Files (x86)", используя разрешение без повышенных прав (режим без прав администратора).

Отладка, которая дала мне следы, что означает, что Установщик не авторизован для любых таких процессов.

Вот фрагмент кода, который делает это:

1. var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = configPath };
2. var configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
3. var section = configuration.GetSection(sectionToEncrypt);
4. section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
5. section.SectionInformation.ForceSave = true;
6. configuration.Save(ConfigurationSaveMode.Modified);

Достигается в строке6 он возвращает меня с ошибкой:

System.Configuration.ConfigurationErrorsException
HResult=0x80131902
Inner Exception 1: 
UnauthorizedAccessException: 
Access to the path 'C:\Program Files (x86)\<AppDirectory>\5tkbxj1v.tmp' is denied.

Любые входы для этого будут любезны.

Заранее спасибо за помощь!

Ответы [ 4 ]

0 голосов
/ 26 июня 2018

С риском повторения некоторых других ответов:

  1. Вы должны работать с повышенными правами для изменения или создания данных в папке Program Files.В этом нет ничего нового, но, очевидно, это означает, что ваша программа не повышена.Он будет работать с повышенными правами, только если помечен как отложенный.

  2. На вашем шаге 3 обычно нет необходимости использовать bat-файл для очистки остаточной программы.Вы можете запустить его как пользовательское действие из двоичной таблицы, поэтому Windows выполнит его потоковую передачу, запустит и очистит после вас.Обратите внимание, что если вы установили этот исполняемый файл как файл и удалили его, то вы должны предположить, что при восстановлении или обновлении исходный MSI будет переустанавливать его.В качестве теста удалите этот файл, затем восстановите продукт и посмотрите, восстанавливается ли файл.

В качестве проверки работоспособности вы должны опубликовать свой источник WiX, связанный с настраиваемым действием и местом его вызова.Как это часто бывает, проблема не в коде, а в среде, в которой он работает.

0 голосов
/ 26 июня 2018

Файлы в папке Program Files не должны изменяться. Если ваши файлы конфигурации не могут быть статичными для всех установок, вы должны поместить их в другую папку, например AppData

0 голосов
/ 26 июня 2018

Только подсекция InstallExecuteSequence между InstallInitialize и InstallFinalize работает с повышенными правами. Остальная часть установки имеет обычные права пользователя, если только MSI не был запущен из уже расширенного приглашения cmd.exe.

Стандартные действия в MSI запускаются с повышенными правами, но в отношении пользовательских действий только пользовательские действия в отложенном режиме, выполняемые без олицетворения, выполняются в системном контексте с повышенными правами . Они могут существовать только между InstallInitialize и InstallFinalize.

Очень распространенная ошибка - вставлять пользовательские действия немедленного режима после InstallFinalize, которые пытаются «настроить» систему в «привилегированных местах». Это всегда приводит к сбою в безопасных средах или при запуске установки без полных прав администратора. Даже если вы устанавливаете ACL для данного файла, который должен быть доступен для записи обычным пользователям, он имеет тенденцию к сбою во время корпоративного развертывания по нескольким техническим причинам.

Получаете ли вы строку подключения от пользователя в графическом интерфейсе? Вы должны иметь возможность шифровать данные, полученные от пользователя, с помощью настраиваемого действия DLL в непосредственном режиме, а затем использовать настраиваемое действие отложенного режима для записи в файл конфигурации - при наличии повышенных прав. Совсем нетривиально, но возможно.

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


Некоторые соответствующие ссылки :

0 голосов
/ 26 июня 2018

Если проблема на самом деле вызвана тем, что небольшой исполняемый файл работает в режиме без прав администратора, вы можете устранить его, установив requestedExecutionLevel как requireAdministrator в манифесте приложения (app.manifest).

Здесь - пошаговый пример.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...