我每隔几秒运行一个批处理文件,使用以下代码与服务器进行时间同步:
Process process = new Process();
process.StartInfo.WorkingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.System);
process.StartInfo.FileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "cmd.exe");
process.StartInfo.Arguments = @"/C C:\TimeSync.bat";
process.StartInfo.CreateNoWindow = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UserName = "username";
SecureString pwd = new SecureString();
Char[] pwdCharacters = "password".ToCharArray();
foreach (char t in pwdCharacters)
{
pwd.AppendChar(t);
}
process.StartInfo.Password = pwd;
process.Start();
string output = process.StandardOutput.ReadToEnd();
问题是它在屏幕上闪烁命令窗口,这是我不想要的。我怎样才能防止这种情况发生?
我看到的一种行为是如果我运行相同的代码UseShellExecute = true
并且不提供用户名和密码,则命令窗口不会闪烁。
所以基本上我想使用 C# 代码作为不同用户默默运行 .bat 文件。
由于您要传递用户名和密码,因此不考虑 CreateNoWindow 参数。这是 Windows 中的一个功能(即错误)。这是五年前的连接详细信息:
http://connect.microsoft.com/VisualStudio/feedback/details/98476/cmd-windows-shows-using-process-with-createnowindow-when-using-username-password-option http://connect.microsoft.com/VisualStudio/feedback/details/98476/cmd-windows-shows-using-process-with-createnowindow-when-using-username-password-option
Process.Start() 调用 advapi32.dll
事件中的 CreateProcessWithLogonW
用户提供用户名和
密码和 CreateProcessWithLogonW
总是打开一个新窗口。
不幸的是,没有解决方法
对于这种行为
这里给出了创建无窗口选项的精彩概述:http://blogs.msdn.com/b/jmstall/archive/2006/09/28/createnowindow.aspx http://blogs.msdn.com/b/jmstall/archive/2006/09/28/createnowindow.aspx它还指出了 msdn 文档中有关此主题的错误。
这个 stackoverflow 答案中有一个非常好的概述:如何在运行批处理文件时隐藏cmd窗口? https://stackoverflow.com/questions/1096591/how-to-hide-cmd-window-while-running-a-batch-file/1096626#1096626
最后,我认为您想创建一个单独的小应用程序,您只需调用一次,并且它作为升级的用户始终运行。然后,它可以按照您想要的频率执行时间同步,方式与上面描述的相同,但无需指定用户名和密码。因此,在应用程序的整个持续时间内,控制台窗口只会“闪烁”一次。
希望这可以帮助
磅
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)