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 下不出现窗口?
部分文章:
- 从 Process.Start C# 隐藏控制台窗口
- C# 我无法让 CreateNoWindow 工作 - 甚至 msdn.com 示例
- .NET - WindowStyle = hidden 与 CreateNoWindow = true?
- 我们什么时候需要将 UseShellExecute 设置为 True?(有关 UseShellExecute 的一些信息)
- C# 新进程窗口不隐藏(不太适用,因为我没有执行脚本)
解决方案
你可以试试这个:
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);
}
推荐阅读
- python - 在 Python 中执行 reqests.get 时设置 API 密钥
- javascript - Jquery 的 3 种不同类型的“点击”效果。各自的差异和问题?
- javascript - 简单的for Camera 适用于 PC 和 Android,但不适用于 iOS Safari
- sql - SQL 选择两个连接表上的所有行
- javascript - 如何在 Input 中从服务器设置值并更改它?
- python - 如何将另一个py文件中的函数调用到django中的模型类
- html - @media 函数在尝试更改 div 的高度时没有响应
- javascript - 如何使用 TypeScript 检查数据库版本?
- javascript - 在选择选项中选择了错误的属性值
- tensorflow - 在 federated-tensorflow 的客户端中运行多个 epoch