Come forzare il mio programma Win # C eseguito come amministratore su qualsiasi computer?

Come forzare il mio programma Win # C eseguito come amministratore su qualsiasi computer? e qualsiasi tipo di sistema operativo?

Ho bisogno di una soluzione di codice (qualsiasi codice di esempio sarà eccellente)

Grazie in anticipo

Puoi incorporare questo manifest nella tua applicazione.

           

Ecco il codice di esempio per eseguire l’applicazione come amministratore.

 ProcessStartInfo proc = new ProcessStartInfo(); proc.UseShellExecute = true; proc.WorkingDirectory = Environment.CurrentDirectory; proc.FileName = Application.ExecutablePath; proc.Verb = "runas"; try { Process.Start(proc); } catch { // The user refused the elevation. // Do nothing and return directly ... return; } Application.Exit(); // Quit itself 

Impostate ProcessStartInfo.Verb su “runas” per farlo funzionare come amministratore. Ecco le FAQ correlate

http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/28f84724-af3e-4fa1-bd86-b0d1499eaefa#x_FAQAnswer91

La risposta ovvia è di aggiungere un file manifest al progetto C # e aggiungere la seguente riga:

  

Ma può anche essere adottato un approccio non ortodosso. Sappiamo che l’accesso al registro richiede privilegi di amministratore. Quindi, se si dispone di una funzione che contiene un accesso di scrittura del registro, la funzione genererà un System.Security.SecurityException se non si esegue il programma come amministratore. È implicito che devi chiamare questa funzione all’inizio del programma. Se viene generata questa eccezione, è ansible informare l’utente di eseguire il programma come amministratore e chiudere il programma.

 public void enforceAdminPrivilegesWorkaround() { RegistryKey rk; string registryPath = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\"; try { if(Environment.Is64BitOperatingSystem) { rk = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64); } else { rk = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry32); } rk = rk.OpenSubKey(registryPath, true); } catch(System.Security.SecurityException ex) { MessageBox.Show("Please run as administrator"); System.Environment.Exit(1); } catch(Exception e) { MessageBox.Show(e.Message); } } 

Qui, il true in linea rk = rk.OpenSubKey(registryPath, true) dice al programma che ha bisogno di accesso in scrittura al registro.

Ha bisogno del file Manifest. Basta inserire un file manifest e scegliere AsInvoker o AsAdministrator.

Se puoi accedere al processo potresti usare proc.Verb = “runas”;

Verifica questo: http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/db6647a3-85ca-4dc4-b661-fbbd36bd561f