【问题标题】:Execute EXE file to run command as administrator on restricted user执行 EXE 文件以在受限用户上以管理员身份运行命令
【发布时间】:2014-06-18 07:49:59
【问题描述】:

我需要在受限用户点击时创建文件EXE,它将以管理员(本地管理员)执行命令

我使用了这个代码:

System.Diagnostics.Process.Start(@"C:\Test.bat", ".\\Administrator", Password,".\\");

有没有办法运行类似的命令:

netsh int ip set address "local area connection" static 192.168.1.16 255.255.255.0 192.168.1.1 1

不使用批处理文件?

当我使用 .msi 文件时,我也遇到了相同代码的问题。它不起作用

System.Diagnostics.Process.Start(@"C:\Test.msi", ".\\Administrator", Password,".\\");

以管理员身份执行 msi 文件的任何方式?

【问题讨论】:

  • 右键文件和Run as administrator.
  • 我需要受限用户在不告诉他密码的情况下执行此操作
  • 与“msi”相关:你最好找到另一种安装你需要的东西的方法——或者直接复制文件?使用组策略?或者也许使用点击一次安装到用户配置文件中?

标签: c#


【解决方案1】:

在 HKEY_CLASSES_ROOT 下找到你的 exe,然后将这个 shell 扩展添加到你的注册表中。

Windows 注册表编辑器 5.00 版

[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker] @="在没有管理员权限的情况下运行 (UAC)"

[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker\command] @="cmd /min /C \"set __COMPAT_LAYER=RUNASINVOKER && start \"\" \"%1\"\""

希望你觉得这很有用

【讨论】:

  • 对不起,我看不懂,你能举个例子吗??
  • 就像我需要更改一台机器的 IP,而我使用我知道的管理员密码在这台机器上使用受限用户,而无需使用管理员登录
【解决方案2】:

运行方式:

set __COMPAT_LAYER=RunAsInvoker
start App Name

在记事本中写入,然后另存为 .bat。

“应用名称”应替换为安装程序。

请记住将 .bat 文件保存在与安装程序相同的位置。否则,该命令将无法识别应用名称。

或者,您可以下载 UniExtract 并以管理安装程序的身份运行,并使用受限用户。将 Uniextract 下载为便携版本,您可以在便携应用中找到它,等等。

【讨论】:

  • 什么是 UniExtract?你怎么能得到它?
【解决方案3】:
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            System.Security.SecureString ssPwd = new System.Security.SecureString();
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.FileName = @"cmd.exe";
            proc.StartInfo.Arguments = "/c netsh interface ip set address \"Ethernet\" static 192.168.1.16 255.255.255.0 192.168.1.1";
            proc.StartInfo.Domain = "";
            proc.StartInfo.Verb = "runas";
            proc.StartInfo.RedirectStandardOutput = true;
            proc.StartInfo.RedirectStandardError = true;
            proc.StartInfo.UserName = sysAdminUser;
            string password = sysAdminPass;
            for (int x = 0; x < password.Length; x++)
            {
                ssPwd.AppendChar(password[x]);
            }
            password = "";
            proc.StartInfo.Password = ssPwd;

            proc.Start();

【讨论】:

    猜你喜欢
    • 2021-12-29
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多