如何强制我的 C# Winforms 程序在任何计算机上以管理员身份运行?和任何类型的操作系统?
我需要代码解决方案(任何示例代码都很好)
提前致谢
您可以将此清单嵌入到您的应用程序中。
<?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>
这是以管理员身份运行应用程序的示例代码。
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” 将让它以管理员身份运行。这里是相关常见问题解答
显而易见的答案是向 C# 项目添加清单文件并添加以下行:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
但是,也可以采取一种相当非正统的方法。我们知道注册表访问需要管理员权限。因此,如果您有一个包含注册表写入权限的函数,并且您不以管理员身份运行该程序,则该函数将抛出
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);
}
}
这里,第
true
行中的rk = rk.OpenSubKey(registryPath, true)
告诉程序它需要对注册表的写访问权限。
需要Manifest文件。只需放置一个清单文件并选择 AsInvoker 或 AsAdministrator。
如果您可以访问您可能使用的流程 proc.Verb = "runas";
检查一下: http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/db6647a3-85ca-4dc4-b661-fbbd36bd561f
我认为您不能强制应用程序在管理模式下运行。如果可以的话黑客就可以完全控制你的电脑
1-创建应用程序清单:
为了使用管理权限运行应用程序,您需要创建应用程序清单文件。此 XML 文件将通知操作系统您的应用程序需要提升权限。
在解决方案资源管理器中右键单击您的项目。
列表项添加 > 新项 > 应用程序清单文件。
2- 编辑应用程序清单:
打开新创建的 app.manifest 文件。您将找到一个标记为 requestsExecutionLevel 的注释部分。
取消注释此部分并将 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-构建并运行。