Сервер 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 3

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.