How to force my C# Winforms program run as administrator on any computer?

前端 未结 5 1090
失恋的感觉
失恋的感觉 2020-11-29 04:52

How to force my C# Winforms program run as administrator on any computer ? and any kind of OS ?

I need code solution (any sample code will be excell

相关标签:
5条回答
  • 2020-11-29 05:33

    You can embed this manifest into your application.

    <?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>  
    
    0 讨论(0)
  • 2020-11-29 05:33

    It needs the Manifest file. Just place a manifest file and choose AsInvoker or AsAdministrator.

    If you can access process you might use proc.Verb = "runas";

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

    0 讨论(0)
  • 2020-11-29 05:36

    The obvious answer is to add a manifest file to the C# project and add the following line:

    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
    

    But, a rather unorthodox approach can also be taken. We know that registry access requires administrator privileges. So, if you have a function that contains a registry write access, the function will throw a System.Security.SecurityException if you don't run the program as an administrator. It is implied that you have to call this function at the beginning of the program. If this exception is thrown, you can inform the user to run the program as an administrator and close the program.

    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);
        }
    }
    

    Here, the true in line rk = rk.OpenSubKey(registryPath, true) tells the program that it needs write access to the registry.

    0 讨论(0)
  • 2020-11-29 05:47

    Here is the sample code to run your application as 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
    

    Set the ProcessStartInfo.Verb to “runas” will let it run as admin. Here is related FAQ

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

    0 讨论(0)
  • 2020-11-29 05:56

    I do not think you can force an application to run in Administrative mode. If you can then hackers can fully control your pc

    0 讨论(0)
提交回复
热议问题