0

想象一下,您的 Windows PC 中的某些软件需要在给定的时间内运行,并且假设它的用户会启动它,但他忘记了。并且该软件应该以管理员身份运行(即具有管理员权限)。所以,为了保证给定的软件在那个时候是打开的,你放了一个看门狗,它可以执行用户应该做的事情。

这不完全是我的情况,但这正是我所需要的。它必须在 C++ 中工作,我正在使用 Qt(尽管我认为这不会有太大的不同)。

我在 MSDN 中搜索了几乎所有关于 CreateProcess() 和类似函数的文件,并在网上看到了几十个示例,但直到现在我都无法做我想做的事情(事实上,我什至无法运行软件,更不用说细节了)。

重要的是要注意看门狗应该只是以管理员身份打开软件并立即“忘记它”;它应该没有控制权,并且打开的软件无论如何都不能依赖于看门狗(例如,如果看门狗关闭,则打开的软件继续正常运行)。

如果有人帮忙,我会很高兴。

莫默吉尔

4

1 回答 1

1

通常,如果程序需要管理员权限才能运行,则需要具有管理员权限的用户来安装它。

这为程序提供了管理员权限。

更新:根据您关于尝试让另一个进程以管理员权限运行另一个应用程序的评论,您应该查看以下代码:

using System.Security.Principal;

public static void ProcessStart(string fileName, string arguments) {
  ProcessStartInfo startInfo = new ProcessStartInfo(fileName, arguments);
#if !PocketPC
  try {
    WindowsIdentity id = WindowsIdentity.GetCurrent();
    WindowsPrincipal pal = new WindowsPrincipal(id);
    if (pal.IsInRole(WindowsBuiltInRole.Administrator)) {
      Process.Start(startInfo);
    }
  } catch (Exception e) {
    Console.WriteLine(e.Message);
  }
#else
  Process.Start(startInfo);
#endif
}

此代码不包括Microsoft PocketPC设备,并且仅当运行该程序的人在管理员组中时才会执行。

您需要做的是为具有管理员权限的帐户(在您要运行应用程序的 PC 上)启动WindowsIdentity并模拟该帐户以运行您的应用程序。

在 CodeProject 上有一个名为User Impersonation in .NET的工作示例,它可以为您提供更多信息。

于 2012-07-04T21:24:27.247 回答