以其他用户身份启动后台进程而不显示窗口

时间:2018-10-22 15:35:17

标签: c#

我想使用特定的用户帐户从控制台启动应用程序,但是没有显示窗口。我已经阅读了多篇有关该主题的Stack Overflow文章,但是这些建议的解决方案似乎都不适合我。我可以启动该应用程序,但是在传递用户名/密码时,我无法阻止窗口

我设法使以下代码在我的计算机(Windows 10)上运行,但是在目标计算机(Windows 7)上无法运行。

目标框架:.NET 4.5.2

在普通的控制台应用程序无法正常工作的情况下,使用输出类型 Console Application 在无窗口WPF应用程序中执行代码。

private void StartProcess(string appPath, string user, SecureString password, string domain)
{
    var processStartInfo = new ProcessStartInfo
    {
        FileName = appPath,
        WorkingDirectory = Path.GetDirectoryName(appPath),
        CreateNoWindow = true,
        UseShellExecute = false,
        WindowStyle = ProcessWindowStyle.Hidden,
        Password = password,
        UserName = user,
        Domain = domain,
        RedirectStandardError = false,
        RedirectStandardOutput = false
    };

    Process.Start(processStartInfo);
}

我的应用程序将从控制台启动,目标也是控制台应用程序。

如何确保该进程在后台运行,而Windows 7下没有出现窗口?

一些文章:

2 个答案:

答案 0 :(得分:1)

您可以尝试以下方法:

private void StartProcess(string appPath, string user, SecureString password, string domain)
{
    var processStartInfo = new ProcessStartInfo
    {
        FileName = appPath,
        WorkingDirectory = Path.GetDirectoryName(appPath),
        CreateNoWindow = true,
        UseShellExecute = false,
        WindowStyle = ProcessWindowStyle.Hidden,
        RedirectStandardOutput = false,
        RedirectStandardError = false,
        Verb = string.Format("runas /user:{0}\\{1} /password:{2}", domain, user, password)
    };
    Process.Start(processStartInfo);
}

答案 1 :(得分:0)

荒诞。 CreateNoWindow = true绝对应该这样做(防止生成窗口)。除了明显的情况(这不是您实际运行的代码)之外,我还有一些想法。很多时候,程序需要解决无法使用Window的问题。因此,他们以这些权利开始了一个单独的过程/一个新的实例。

服务do not get interactive Sessions by default as of Vista(并且您不应过度使用)。因此,他们要么都有由Task Sheduler启动的帮助程序。或者只是通过Process强制启动它。对于某些旧代码,例如(t)生锈的COM Officer互操作,明确需要Interactive sessiosn。

如果您有这样的程序,则基本上是在玩其他名字最高的游戏:https://blogs.msdn.microsoft.com/oldnewthing/20110310-00/?p=11253