Сервер 2008 Не Может Установить Права Пользователя
Я попытался сделать некоторые вещи Win32 в C# 3.5, чтобы получить повышенные права пользователя для консольного приложения. Я разрабатываю на Visual Studio 2008 SP1 / GDR, и все работает нормально при запуске под отладчиком. Все также прекрасно работает, когда я запускаю консольное приложение автономно. Все также работает нормально, когда я упаковываю все в MSI, устанавливаю его на сервер 2003 и запускаю консольное приложение.
Если я беру тот же MSI и устанавливаю его на сервер 2008 с включенным UAC, а затем запускаю консольное приложение, я получаю сообщения типа это:
Unable to set right for the account "DOMAINQAUSER": SeCreateGlobalPrivilege
System.UnauthorizedAccessException Attempted to perform an unauthorized operation.
Я не могу ожидать, что мои администраторы развертывания/сервера будут делать что-либо с моим приложением, кроме его установки, и они не собираются отключать UAC. Должен быть какой-то программный способ правильно установить права пользователя, которые я могу добавить в консольное приложение - Кто-нибудь знает, как?
Спасибо.
2 ответа:
Вероятно, вы используете префикс "Global\" для имени объекта в вашем приложении, и ваше приложение будет запущено в сеансе сервера узла сеансов удаленных рабочих столов (узел сеансов удаленных рабочих столов). В этом случае ваша программа должна включить SE_CREATE_GLOBAL_NAME (
SeCreateGlobalPrivilege
) привилегия. Смотрите C# - Как включить SeDebugPrivilege? (но используйтеSE_CREATE_GLOBAL_NAME
вместоSE_DEBUG_NAME
) или манипулируйте привилегиями в управляемом коде надежно, надежно и эффективно в качестве примера.
Я предполагаю, что UAC включен на машине 2008 года, и я пока не могу прокомментировать ваш вопрос, чтобы узнать.
Если это так, убедитесь, что в вашем приложении.файл манифеста в VS (в разделе свойства), изменить
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
К
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Даже если код выполняется от имени администратора, вы должны получить предупреждение UAC.