bat文件用窗体程序来调用是没问题的。
但是写在windows服务中去调用的时候,就不行了……
服务是成功启动了的
服务的运行账户是localSystem
没有成功调用bat文件。
后来我右击服务。属性。将允许与桌面互动 打上勾,再重启服务,还是不行……
唉……这特么是怎么回事啊,服务是没有界面的,
是不是调用bat的时候,那个cmd的黑窗口也不会弹出来?
就算不会弹出来,悄悄在后台运行……那运行的结果是有日志记录的,
总之bat文件的确没有调用成功,也没有报异常……不知道是哪里出了问题。
请高手帮解决一下,谢谢~~
右击服务..属性,登录账户设置为超管就可以了.
你是怎么用bat的?
/// <summary> /// 安装后自动启动服务 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e) { //Process p = new Process //{ // StartInfo = // { // FileName = "cmd.exe", // UseShellExecute = false, // RedirectStandardInput = true, // RedirectStandardOutput = true, // RedirectStandardError = true, // CreateNoWindow = true // } //}; //p.Start(); //const string cmdString = "这里面写你需要批处理内容"; //cmd命令 //p.StandardInput.WriteLine(cmdString); //p.StandardInput.WriteLine("exit"); }
首先,如果是简单的BAT文件,干脆重写其中的逻辑。
其次,Windows的Session 0 隔离服务不鼓励你这种调用方式,不过,你仍可以利用函数“CreateProcessAsUser”来创建应用程序session下的进程,从而调用外部exe。http://msdn.microsoft.com/zh-cn/library/windows/hardware/gg463353.aspx
最后,如果你要调试windows service,可以试着记日志,或用这里的方法断点调试:
http://www.cnblogs.com/downmoon/archive/2009/09/16/1567643.html