如何强制我的C# Winforms程序在任何计算机上以管理员身份运行?

ia2d9nvy  于 2023-10-23  发布在  C#
关注(0)|答案(6)|浏览(196)

如何强制我的C# Winforms程序在任何计算机上以管理员身份运行?和任何类型的操作系统?
我需要代码解决方案(任何示例代码将是优秀的)
Thanks in advance

brc7rcf0

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>
holgip5t

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身份运行。这里是相关的FAQ
http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/28f84724-af3e-4fa1-bd86-b0d1499eaefa#x_FAQAnswer91

monwx1rj

monwx1rj3#

显而易见的答案是将清单文件添加到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);
    }
}

在这里,rk = rk.OpenSubKey(registryPath, true)行中的true告诉程序它需要对注册表的写访问权。

j2datikz

j2datikz4#

它需要清单文件只需放置一个清单文件,然后选择AsManager或AsAdministrator。
如果你可以访问进程,你可以使用proc.Verb =“runas”;
检查以下各项:http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/db6647a3-85ca-4dc4-b661-fbbd36bd561f

pgx2nnw8

pgx2nnw85#

我不认为你可以强制应用程序在管理模式下运行。如果你可以那么黑客可以完全控制你的电脑

ht4b089n

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-构建和运行。

相关问题