Jak wymusić my.NET aplikacja do uruchomienia jako administrator?

Gdy mój program zostanie zainstalowany na komputerze klienckim, jak zmusić mój program do uruchomienia jako administrator w systemie Windows 7?

Author: Daniel B, 2010-05-12

12 answers

Będziesz chciał zmodyfikować manifest, który zostanie osadzony w programie. Działa to na Visual Studio 2008 i nowszych: projekt + Dodaj nową pozycję, Wybierz "plik manifest aplikacji". Zmień element <requestedExecutionLevel> na:

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

Użytkownik otrzymuje znak zachęty UAC Po uruchomieniu programu. Używaj mądrze; ich cierpliwość może szybko się zużyć.

 972
Author: Hans Passant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-18 14:23:32

Dodanie elementu requestedExecutionLevel do manifestu to tylko połowa sukcesu; musisz pamiętać, że UAC można wyłączyć. Jeśli tak, musisz wykonać sprawdzanie w stary sposób i umieścić okno dialogowe błędu, jeśli użytkownik nie jest administratorem
(wywołanie IsInRole(WindowsBuiltInRole.Administrator) na Twoim wątku CurrentPrincipal).

 133
Author: Anders,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-30 14:51:04

Zaimplementowałem jakiś kod, aby zrobić to ręcznie:

using System.Security.Principal;
public bool IsUserAdministrator()
{
    bool isAdmin;
    try
    {
        WindowsIdentity user = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(user);
        isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    catch (UnauthorizedAccessException ex)
    {
        isAdmin = false;
    }
    catch (Exception ex)
    {
        isAdmin = false;
    }
    return isAdmin;
}
 48
Author: NG.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-05 16:30:58

Możesz osadzić plik manifestu w pliku EXE, co spowoduje, że system Windows (7 lub wyższy) zawsze uruchomi program jako administrator.

Więcej szczegółów znajdziesz w Krok 6: Utwórz i Osadź Manifest aplikacji (UAC) (MSDN).

 39
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-05 16:30:14

Szczegółowe kroki są następujące.

  1. Dodaj plik manifest aplikacji do rozwiązania
  2. Zmień ustawienie aplikacji na " app.manifest "
  3. zaktualizuj znacznik "requestedExecutionLevel", aby wymagaładministratora.

Dodawanie pliku w rozwiązaniu

Wybierz Plik Manifest Aplikacji

Wybierz opcję Manifest

Zaktualizuj plik manifestu

Zauważ, że używając tego kodu musisz wyłączyć ustawienia zabezpieczeń ClickOnce, aby to zrobić, wejdź do Właściwości - > bezpieczeństwo - > ClickOnce Security

 35
Author: Hassan Rahman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-15 12:06:09

Podczas pracy nad Visual Studio 2008 kliknij prawym przyciskiem myszy Project -> Add New Item, a następnie wybierz Application Manifest File.

W pliku manifestu znajdziesz znacznik requestedExecutionLevel i możesz ustawić poziom na trzy wartości:

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

Lub

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

Lub

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

Aby ustawić aplikację jako administrator, musisz wybrać środkową.

 14
Author: Rashad Maqsood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-05 16:32:13

W Visual Studio 2010 kliknij prawym przyciskiem myszy nazwę projektu. Naciśnij "zobacz Ustawienia systemu Windows", generuje i otwiera plik o nazwie "aplikacja.manifestu". W tym pliku zastąp "asInvoker" na "requireAdministrator", jak wyjaśniono w komentowanych sekcjach w pliku.

 10
Author: Evolved,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-07 15:19:27

Zgodnie z

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

Będziesz chciał dodać manifest aplikacji, Jeśli jeszcze go nie masz lub nie wiesz, jak go dodać. Ponieważ niektóre projekty nie dodają automatycznie oddzielnego pliku manifestu, najpierw przejdź do właściwości projektu, przejdź do zakładki Aplikacja i sprawdź, czy projekt nie wyklucza manifestu u dołu dotknięcia.

  • następnie kliknij prawym przyciskiem myszy projekt
  • Dodaj Nowy Artykuł
  • Ostatni, znajdź i kliknij manifest aplikacji Plik
 10
Author: Justin Mcconnell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-05 16:34:12

Innym sposobem, aby to zrobić, tylko w kodzie, jest wykrycie, czy Proces jest uruchomiony jako admin, jak w odpowiedź przez @NG.. Następnie ponownie otwórz aplikację i zamknij bieżącą.

Używam tego kodu, gdy aplikacja potrzebuje uprawnień administratora tylko wtedy, gdy jest uruchamiana pod pewnymi warunkami, na przykład podczas instalacji jako usługi. Więc nie musi działać jako admin cały czas, jak inne odpowiedzi wymuszają to też.

Uwaga w poniższym kodzie NeedsToRunAsAdmin jest metoda, która wykrywa, czy w obecnych warunkach wymagane są uprawnienia administratora. Jeśli to zwróci false Kod nie podniesie się sam. Jest to główna przewaga tego podejścia nad innymi.

Chociaż ten kod ma zalety opisane powyżej, musi ponownie uruchomić się jako nowy proces, który nie zawsze jest tym, czego chcesz.

private static void Main(string[] args)
{
    if (NeedsToRunAsAdmin() && !IsRunAsAdmin())
    {
        ProcessStartInfo proc = new ProcessStartInfo();
        proc.UseShellExecute = true;
        proc.WorkingDirectory = Environment.CurrentDirectory;
        proc.FileName = Assembly.GetEntryAssembly().CodeBase;

        foreach (string arg in args)
        {
            proc.Arguments += String.Format("\"{0}\" ", arg);
        }

        proc.Verb = "runas";

        try
        {
            Process.Start(proc);
        }
        catch
        {
            Console.WriteLine("This application requires elevated credentials in order to operate correctly!");
        }
    }
    else
    {
        //Normal program logic...
    }
}

private static bool IsRunAsAdmin()
{
    WindowsIdentity id = WindowsIdentity.GetCurrent();
    WindowsPrincipal principal = new WindowsPrincipal(id);

    return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
 5
Author: TheLethalCoder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:48

Jest to uproszczona wersja tej odpowiedzi

public bool IsUserAdministrator()
{
    try
    {
        WindowsIdentity user = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(user);
        return principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    catch (Exception)
    {
        return false;
    }
}
 3
Author: Hakam Fostok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-05 07:42:52

Możesz utworzyć manifest za pomocą ustawień bezpieczeństwa ClickOnce, a następnie go wyłączyć:

Right click on the Project -> Properties -> Security -> Enable ClickOnce Security Settings

Po kliknięciu w nią, w folderze właściwości projektu zostanie utworzony plik o nazwie app.manifest Po utworzeniu można odznaczyć opcję Enable ClickOnce Security Settings

Otwórz ten plik i zmień tę linię:

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

Do:

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

Spowoduje to, że program będzie wymagał uprawnień administratora.

 2
Author: Yochai Timmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-14 10:19:01

Kliknij prawym przyciskiem myszy plik wykonywalny, przejdź do Właściwości > kompatybilność i zaznacz pole "Uruchom ten program jako administrator".

Jeśli chcesz uruchomić go jako admin dla wszystkich użytkowników, zrób to samo w "zmień ustawienia dla wszystkich użytkowników".

 -2
Author: SlickJayD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-27 19:03:29