首页 > 代码库 > 管理员权限运行
管理员权限运行
private void Form1_Load(object sender, EventArgs e) { if (WindowsIdentity.GetCurrent().Owner == WindowsIdentity.GetCurrent().User) // Check for Admin privileges { try { this.Visible = false; ProcessStartInfo info = new ProcessStartInfo(Application.ExecutablePath); // my own .exe info.UseShellExecute = true; info.Verb = "runas"; // invoke UAC prompt Process.Start(info); } catch (Win32Exception ex) { if (ex.NativeErrorCode == 1223) //The operation was canceled by the user. { MessageBox.Show("Why did you not selected Yes?"); Application.Exit(); } else throw new Exception("Something went wrong :-("); } Application.Exit(); } else { // MessageBox.Show("I have admin privileges :-)"); } }
if (!IsRunAsAdministrator()){ var processInfo = new ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase); // The following properties run the new process as administrator processInfo.UseShellExecute = true; processInfo.Verb = "runas"; // Start the new process try { Process.Start(processInfo); } catch (Exception) { // The user did not allow the application to run as administrator MessageBox.Show("Sorry, this application must be run as Administrator."); } // Shut down the current process Application.Current.Shutdown();}private bool IsRunAsAdministrator(){ var wi = WindowsIdentity.GetCurrent(); var wp = new WindowsPrincipal(wi); return wp.IsInRole(WindowsBuiltInRole.Administrator);}
1)app.mainfest文件中
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
节点的值设置为 asInvoker
2)在App.cs中增加以下代码:
/// <summary> /// 检查是否是管理员身份 /// </summary> private void CheckAdministrator() { var wi = WindowsIdentity.GetCurrent(); var wp = new WindowsPrincipal(wi); bool runAsAdmin = wp.IsInRole(WindowsBuiltInRole.Administrator); if (!runAsAdmin) { // It is not possible to launch a ClickOnce app as administrator directly, // so instead we launch the app as administrator in a new process. var processInfo = new ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase); // The following properties run the new process as administrator processInfo.UseShellExecute = true; processInfo.Verb = "runas"; // Start the new process try { Process.Start(processInfo); } catch (Exception ex) { ex.WriteLog(); } // Shut down the current process Environment.Exit(0); } }
3)重写 OnStartup 函数
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); CheckAdministrator(); //如果不是管理员,程序会直接退出,并使用管理员身份重新运行。 StartupUri = new Uri("MainWindow.xaml", UriKind.RelativeOrAbsolute); }
4)保存,重新生成,发布
加入上面的代码之后,重新使用ClickOnce方式发布
管理员权限运行
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。