2016-05-23 2 views
2

Я создал настраиваемое действие:CustomAction Запуск от имени администратора

<CustomAction Id='AddEventLog' BinaryKey='CustomActionEventLog.dll' DllEntry='AddEventLog' Return="check" Execute="immediate"/> 

Установите последовательность

<Custom Action="AddEventLog" Before="InstallFinalize" /> 

Мой инсталлятор делает всплывал и сказать, что он нуждается права администратора для запуска. Что я ему даю.

InstallPrivileges='elevated' InstallScope='perMachine' AdminImage='yes' 

Однако при выполнении пользовательского действия оно не работает, поскольку оно не работает как администратор.

Я даже попытался добавить следующее в app.manifest в свой проект DLL проекта. Это не помогло.

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

Я просмотрел все учебники и сообщения на форуме, которые я могу найти на эту тему. Отметить пока не удалось.

Если у кого-то есть лучшие теги для этого, не стесняйтесь добавлять их, я боюсь с этим весь день.

Обновление для осветления:

Хотя мой CustomAction делает работу с EventLog Я не использую http://schemas.microsoft.com/wix/UtilExtension Util: EventSource. Это вопрос генрала, вы можете заставить customAction работать как администратор?

+0

Что делает ваше собственное действие?Могут быть добавлены расширения wix, которые могут быть полезными, которые уклоняются от вашей проблемы (например, http://stackoverflow.com/questions/58538/how-do-you-create-an-event-log-source-using-wix). –

+0

Добавляет и удаляет новый журнал событий и источник событий. Для System.Diagnostics.EventLog Мне не удалось найти существующее расширение для этого. – DaImTo

+0

Итак, пока это напрямую не отвечает на ваш вопрос, я думаю, вы ищете утилиту: EventSource (http://wixtoolset.org/documentation/manual/v3/xsd/util/eventsource.html), вы необходимо предоставить правильный файл EventLogMessages.dll для версии рамки, на которую вы нацеливаетесь, объяснение того, как это сделать, используя расширение NetFx, находится здесь (http://stackoverflow.com/questions/12433883/how-to-create-a- net-event-log-source-using-wix) –

ответ

2

Отказ от ответственности, я не делал этого ранее, и лично я бы использовал другой подход к использованию расширений wix, но вы должны иметь возможность предоставлять повышенные права на свои пользовательские действия, используя отложенное выполнение, а не выдавать себя за текущий пользователь. Так что в вашем случае Execute="immediate" - это то, что стоит на вашем пути.

<CustomAction Id="MyCustomAction" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="no"/> 


<!-- -or- --> 


<CustomAction Id="MyCustomAction" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="commit" Return="check" Impersonate="no"/> 

Source

+0

К сожалению, нет расширения wix, которое делает именно то, что я делаю. Сегодня я попробовал отложить. Я попробую совершить и дам вам знать. – DaImTo

2

Для выполнения каких-либо пользовательских действий с правами администратора вы должны запустить пользовательское действие во время части сервера установки. т.е.: это должно быть отложенное пользовательское действие. В противном случае, я думаю, вы получаете окно message.exe с запросом прав администратора.

Все функции msi устанавливаются на две части, клиентскую и серверную части установки. Часть клиента - это то, где вы видите пользовательский интерфейс и устанавливаете свойства, которые могут определять, где вещи устанавливаются и какие устанавливаются (они должны быть отмечены как Secure для серверной части установки, чтобы иметь к ним доступ). Часть сервера - это то, что фактически помещает файлы в вашу систему. Это всегда (??) требует прав администратора, потому что может записывать файлы в файлы Program Files и другие защищенные расположения файлов.

Эти пользовательские действия должны быть отмечены как «Выполнять =« отложен »и также должны быть запланированы между InstallaInitialize и InstallFinalize.

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

Смежные вопросы