如何强制我的C# Winforms程序在任何计算机上以管理员身份运行?和任何类型的操作系统?我需要代码解决方案(任何示例代码将是优秀的)Thanks in advance
brc7rcf01#
您可以将此清单嵌入到应用程序中。
<?xml version="1.0" encoding="utf-8" ?> <asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <assemblyIdentity version="1.0.0.0" name="MyApplication" /> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> </requestedPrivileges> </security> </trustInfo> </asmv1:assembly>
holgip5t2#
下面是以admin身份运行应用程序的示例代码。
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
将**ProcessStartInfo.Verb设置为“runas”**将使其以admin身份运行。这里是相关的FAQhttp://social.msdn.microsoft.com/Forums/en-US/winforms/thread/28f84724-af3e-4fa1-bd86-b0d1499eaefa#x_FAQAnswer91
monwx1rj3#
显而易见的答案是将清单文件添加到C#项目并添加以下行:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
但是,也可以采取一种相当非正统的方法。我们知道注册表访问需要管理员权限。因此,如果你有一个包含注册表写访问的函数,如果你不以管理员身份运行该程序,该函数将抛出System.Security.SecurityException。这意味着你必须在程序开始时调用这个函数。如果引发此异常,则可以通知用户以管理员身份运行程序并关闭程序。
System.Security.SecurityException
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); } }
在这里,rk = rk.OpenSubKey(registryPath, true)行中的true告诉程序它需要对注册表的写访问权。
rk = rk.OpenSubKey(registryPath, true)
true
j2datikz4#
它需要清单文件只需放置一个清单文件,然后选择AsManager或AsAdministrator。如果你可以访问进程,你可以使用proc.Verb =“runas”;检查以下各项:http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/db6647a3-85ca-4dc4-b661-fbbd36bd561f
pgx2nnw85#
我不认为你可以强制应用程序在管理模式下运行。如果你可以那么黑客可以完全控制你的电脑
ht4b089n6#
1-创建应用程序清单:为了以管理权限运行应用程序,您需要创建应用程序清单文件。此XML文件将通知操作系统您的应用程序需要提升的权限。
2-编辑应用程序清单:打开新创建的app.manifest文件。您将找到一个标记为requestedExecutionLevel的注解部分。取消此部分的注解,并将level属性设置为“requireAdministrator”:
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> </requestedPrivileges> </security>
3-构建和运行。
6条答案
按热度按时间brc7rcf01#
您可以将此清单嵌入到应用程序中。
holgip5t2#
下面是以admin身份运行应用程序的示例代码。
将**ProcessStartInfo.Verb设置为“runas”**将使其以admin身份运行。这里是相关的FAQ
http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/28f84724-af3e-4fa1-bd86-b0d1499eaefa#x_FAQAnswer91
monwx1rj3#
显而易见的答案是将清单文件添加到C#项目并添加以下行:
但是,也可以采取一种相当非正统的方法。我们知道注册表访问需要管理员权限。因此,如果你有一个包含注册表写访问的函数,如果你不以管理员身份运行该程序,该函数将抛出
System.Security.SecurityException
。这意味着你必须在程序开始时调用这个函数。如果引发此异常,则可以通知用户以管理员身份运行程序并关闭程序。在这里,
rk = rk.OpenSubKey(registryPath, true)
行中的true
告诉程序它需要对注册表的写访问权。j2datikz4#
它需要清单文件只需放置一个清单文件,然后选择AsManager或AsAdministrator。
如果你可以访问进程,你可以使用proc.Verb =“runas”;
检查以下各项:http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/db6647a3-85ca-4dc4-b661-fbbd36bd561f
pgx2nnw85#
我不认为你可以强制应用程序在管理模式下运行。如果你可以那么黑客可以完全控制你的电脑
ht4b089n6#
1-创建应用程序清单:
为了以管理权限运行应用程序,您需要创建应用程序清单文件。此XML文件将通知操作系统您的应用程序需要提升的权限。
2-编辑应用程序清单:
打开新创建的app.manifest文件。您将找到一个标记为requestedExecutionLevel的注解部分。
取消此部分的注解,并将level属性设置为“requireAdministrator”:
3-构建和运行。