我想使用特定的用户帐户从控制台启动应用程序,但是没有显示窗口。我已经阅读了多篇有关该主题的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下没有出现窗口?
一些文章:
答案 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