Najłatwiejsza możliwość:
Możesz zrobić w manifeście swojej aplikacji, aby wymagała podwyższonych uprawnień - prawym na projekt, "Add New Item", "Application Manifest File". Robi ci się plik manifestu, który jest dołączany do aplikacji. Zmieniasz atrybut level
elementu requestedExecutionLevel
na requireAdministrator
.
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
https://stackoverflow.com/a/2818776
I voila, twoja aplikacja przy każdym starcie dostaje dialog UAC w którym użytkownik musi ją zaakceptować do startu, co - skoro się dzieje przy każdym starcie - prawdopodobnie doprowadza użytkownika do pasji :)
Lepsza możliwość:
sprawdzasz, czy aplikacja jest w autostarcie w HKLM, jeśli nie, to sprawdzasz, czy masz uprawnienia administratora - jeśli tak, do dodajesz, jeśli nie - to uruchamiasz ją samą ponownie, na podwyższonych uprawnieniach, ale na przykład z parametrem, który oznacza, że tylko tę operację należy wykonać.
Sprawdzenie, czy użytkownik jest administratorem:
/// <summary>
/// Sprawdza czy aplikacja jest uruchomiona z podwyższonymi uprawnieniami
/// </summary>
/// <returns></returns>
private static bool IsRunningAsAdministrator()
{
WindowsIdentity identity = WindowsIdentity.GetCurrent();
if (identity != null)
{
WindowsPrincipal principal = new WindowsPrincipal(identity);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
return false;
}
Uruchomienie samej siebie z podwyższonymi uprawnieniami i parametrem (akurat /silent
):
var selfName = Process.GetCurrentProcess().MainModule.FileName;
ProcessStartInfo self = new ProcessStartInfo(selfName);
self.Verb = "runas"; // o to tutaj jest najważniejsze, bo robi elewację UAC
self.WindowStyle = ProcessWindowStyle.Hidden;
self.Arguments = "/silent";
Process.Start(self);
Najlepsza możliwość:
nie robisz nic automatycznie, tylko użytkownik musi jawnie kliknąć przycisk oznaczony logo tarczy (jak dodać: https://stackoverflow.com/a/33286893), po którym następuje np. coś takiego jak w opcji powyżej. Dzięki czemu wie, co się dzieje i dlaczego.
Alternatywnie:
dodajesz rzeczy do HKLM podczas instalacji, a instalator sam już wymaga podwyższonych uprawnień.
Jest jeszcze opcja, którą podał @fasadin, czyli żeby zmienić globalnie ustawienia zapisu do tego klucza Rejestru, ale jest to kompletnie niezgodne z dobrymi praktykami. I w sumie też samo wymaga podwyższonych uprawnień, więc błędne koło.
Sorki, nie znam VB.NET, więc kod w C#.