Как заставить приложение WPF работать в режиме администратора

У меня есть приложение WPF, которое обращается к службам windows, планировщикам задач на локальном компьютере. Когда я развертываю это приложение WPF и запускаю его без "Запуск от имени администратора" , он терпит неудачу, поскольку он не может получить доступ к службам windows и планировщикам задач на локальном компьютере. Если я запускаю его с помощью "Запуск от имени администратора", он работает правильно.

Как заставить мое приложение по умолчанию работать в режиме администратора, когда оно развернуто в производстве?

2 ответов


вам нужно добавить app.manifest. Изменить requestedExecutionLevel от asInvoker to requireAdministrator. Новый манифест можно создать с помощью диалогового окна "Добавить файл", изменив его на "Требуется администратор". Убедитесь, что параметры проекта настроены на использование этого манифеста. Это позволит вам просто дважды щелкнуть приложение, и оно автоматически запросит повышение, если оно еще не сделано.

Подробнее см. здесь документация:

http://msdn.microsoft.com/en-us/library/bb756929.aspx

изменить: Для чего это стоит, статья использует VS 2005 и использует mt.exe для внедрения манифеста. если вы используете Visual studio 2008+, это встроено. Просто откройте свойства проекта и на вкладке "приложения" вы можете выбрать манифеста.


Если вы не хотите сломать Clickonce, этот код является лучшим решением:

using System.Security.Principal;
using System.Management;
using System.Diagnostics;
using System.Reflection;
//Put this code in the main entry point for the application
// Check if user is NOT admin 
if (!IsRunningAsAdministrator())
{
    // Setting up start info of the new process of the same application
    ProcessStartInfo processStartInfo = new ProcessStartInfo(Assembly.GetEntryAssembly().CodeBase);

    // Using operating shell and setting the ProcessStartInfo.Verb to “runas” will let it run as admin
    processStartInfo.UseShellExecute = true;
    processStartInfo.Verb = "runas";

    // Start the application as new process
    Process.Start(processStartInfo);

    // Shut down the current (old) process
    System.Windows.Forms.Application.Exit();
    }
}

/// <summary>
/// Function that check's if current user is in Aministrator role
/// </summary>
/// <returns></returns>
public static bool IsRunningAsAdministrator()
{
    // Get current Windows user
    WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();

    // Get current Windows user principal
    WindowsPrincipal windowsPrincipal = new WindowsPrincipal(windowsIdentity);

    // Return TRUE if user is in role "Administrator"
    return windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator);
}

основанный в: http://matijabozicevic.com/blog/wpf-winforms-development/running-a-clickonce-application-as-administrator-also-for-windows-8