日期:2014-05-17  浏览次数:21146 次

window service 中调用外部exe
     我自己写了一个window service,想在里面调用一个外部的exe程序,但是每次执行以后总是没有任何反应,也没有报错。但是我用C#写了一个可执行程序,然后用同样的代码在可执行程序中调用外部的exe就可以成功。网上说,要勾选服务的"允许与桌面交互",我也勾选了,但还是没有任何反应。为什么啊?
C# windows?service

------解决方案--------------------
string command;     
ProcessStartInfo psi = new ProcessStartInfo("cmd", "/c " + command);
                psi.RedirectStandardOutput = true;
                psi.UseShellExecute = false;
                psi.CreateNoWindow = true;
                Process proc = new Process();
                proc.StartInfo = psi;
                proc.Start();
------解决方案--------------------
谁让你的那个程序不是.net的控制台程序,并且也不真正支持进程间通讯技术呢?!不管这类。我愿意给你的建议,就是扔掉那个程序,用.net来写。
------解决方案--------------------
一般来说,service中不调用有互动的EXE,你能不能在service只是调一个中间的EXE。在中间的EXE中再调你现在要调用的EXE.
希望能对你有帮助。
------解决方案--------------------
从Vista开始,安全改进就包括了服务隔离(见:http://msdn.microsoft.com/zh-cn/library/windows/hardware/gg463353.aspx)。
服务运行在session 0,并且在特殊的桌面下。因此,没有办法跟用户桌面进行直接交户(改注册表也不行)。

服务创建的进程,默认继承了父进程的环境,也就是在session 0的特殊桌面下。进程可以运行,但同样没有办法直接同用户交户。