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?
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ć.
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
).
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;
}
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).
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.
- Dodaj plik manifest aplikacji do rozwiązania
- Zmień ustawienie aplikacji na " app.manifest "
- zaktualizuj znacznik "requestedExecutionLevel", aby wymagaładministratora.
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
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ą.
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.
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
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);
}
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;
}
}
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.
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".
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