【问题标题】:Start Process as Administrator, without UseShellExecute?以管理员身份启动进程,不使用 UseShellExecute?
【发布时间】:2014-10-08 01:52:02
【问题描述】:

所以这是我的问题:

我已经启动了一个 .bin 文件,它只是一个 .exe,重命名为 .bin,具有管理员权限。

这是我所拥有的:

PSI.FileName = "Client.bin";
PSI.WorkingDirectory = Directory.GetCurrentDirectory();
PSI.UseShellExecute = false;
PSI.Verb = "runas";
Process.Start(PSI);

我还在清单中设置了 requireAdministrator。

我必须将 UseShellExecute 设置为 false,这是我能找到的将 .bin 作为 .exe 启动的唯一方法。但是,根据Here,runas 和清单仅在 UseShellExecute 设置为 true 时使用。

问题:如何以提升的权限启动非 .exe 进程?

【问题讨论】:

  • 那么,为什么不能使用 ShellExecute?如果文件是有效的 PE 可执行文件,则文件扩展名是什么无关紧要。
  • 为什么不重命名文件?
  • 查看应用清单文件,您可以指定您的应用需要提升的权限。因此,如果我没记错的话,您从应用程序中启动的任何进程都应该以提升的权限运行。
  • 如果您设置了 UseShellExecute,它会尝试启动文件,就像您双击它一样。因此,由于 .bin 文件不存在文件关联,因此存在异常。 @Jason,仅当 ShellExecute 为真时才考虑到这一点。另外,不能重命名文件,它是给客户的,而且“不可能”

标签: c# process


【解决方案1】:

拥有一个具有管理权限的可执行文件的父进程,然后从中启动“.bin”文件。

【讨论】:

    【解决方案2】:

    根据this answer,这不可能直接运行带有海拔的.bin文件。

    至少你可以用runas(和ShellExecute = true)运行你自己的.exe,并用命令行命令它运行.tmp(没有ShellExecute,但进程已经被提升)然后死掉。但这是“最后机会”的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      相关资源
      最近更新 更多