Как заставить приложение WPF работать в режиме администратора - PullRequest
46 голосов
/ 11 марта 2011

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

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

Ответы [ 3 ]

73 голосов
/ 11 марта 2011

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

Дополнительную документацию см. Здесь:

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

РЕДАКТИРОВАТЬ: Для чего стоит, в статье используется VS 2005 и mt.exe для встраивания манифеста.если вы используете Visual studio 2008+, он встроен. Просто откройте свойства вашего проекта и на вкладке «Приложение» вы можете выбрать манифест.

4 голосов
/ 22 ноября 2018
  1. Щелкните правой кнопкой мыши ваш проект WPF, чтобы добавить новый элемент: «Добавить-> Новый элемент ...»
  2. Выберите «Файл манифеста приложения» и нажмите кнопку Добавить
  3. Дважды щелкните свойтолько что созданный файл манифеста и измените
    <requestedExecutionLevel level="asInvoker" uiAccess="false" />

на

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

Тогда приложение WPF будет запускаться от имени администратора.

1 голос
/ 12 августа 2018

Если вы не хотите взломать 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

...