本来在Windows 7 上面不行,后面在网站查了资料,说Windows7把那个功能禁用了,后面解决后,放到服务器上就启动不了,但是在Windows7上可以。
服务里面的属性 设置 界面交互式 设置过了,没有效果。
Windows服务代码:
// Onstart 方法里面的全部代码 这段代码 就是可以Window7 上启动外部程序的代码,放入服务器就不行了(2003,2008)
try {
appStartPath = @"D:\source\166\课程中心3.0\Tools\ACCService\ACCService\ACCService\bin\Debug\ACCService.exe"; //外部程序路径 IntPtr userTokenHandle = IntPtr.Zero; ApiDefinitions.WTSQueryUserToken(ApiDefinitions.WTSGetActiveConsoleSessionId(), ref userTokenHandle);
ApiDefinitions.PROCESS_INFORMATION procInfo = new ApiDefinitions.PROCESS_INFORMATION(); ApiDefinitions.STARTUPINFO startInfo = new ApiDefinitions.STARTUPINFO(); startInfo.cb = (uint)Marshal.SizeOf(startInfo);
ApiDefinitions.CreateProcessAsUser( userTokenHandle, appStartPath, "", IntPtr.Zero, IntPtr.Zero, false, 0, IntPtr.Zero, null, ref startInfo, out procInfo);
if (userTokenHandle != IntPtr.Zero) ApiDefinitions.CloseHandle(userTokenHandle);
_currentAquariusProcessId = (int)procInfo.dwProcessId; } catch (Exception ex) { // MessageBox.Show(string.Format("Start Application failed, its path is {0} ,exception: {1}", appStartPath, ex.Message)); } }
检查外部程序的路径是否正确,单独打开外部程序确保依赖的dll文件都在
路径 是正确的。我单独拿路径出来运行过。而且我的项目是拷贝过去的。 单独都是能运行的
难道是权限的问题?
还有楼主以后你不要这样贴你的代码,
编辑器中最后有个插入代码的按钮。用它
在你没解决 Window 7 上无法启动之前,是否能在2003,2008上启动?
如果是,你就在启动前判断一下操作系统版本,非Windows 7 的时候还是用原来的代码启动。
不行。一开始就是在2003,2008上面先试的,后面经理 叫我解决,我的电脑是Windows7 ,在我的电脑上解决后,服务器了还是解决不了。
@WindowsPhone程序员: 你这样测试下,用 Process.Start 启动一个外部程序,在服务上设置为“本地系统帐户”和"允许服务与桌面交互",记得在Windows 2003 上测试。
session0的问题吧
至于什么是session0 google下
我记得msdn上有文章的
在服务的属性的登录选项卡中,把允许服务与桌面交互勾选上,再试试。
这个试了 很多次了 不行
我以前也是遇到这个问题,但是跟楼主不同的是我的在Win7上不行,在Server2003上可以,这里的不行和行指的是Windows服务启动外部程序这个外部程序如果是有Ui界面的话在Win7上回弹个框框出来需要手动确认还只能在一个全屏的界面中运行此程序,在Server2003上就直接启动了,最后也没找出有效的解决办法。
你在 Window7 上 我用我发的代码 就可以用 Window7 禁用了某个功能 用我发的代码 就应该可以
你在 Window7 上 我用我发的代码 就可以用 Window7 禁用了某个功能 用我发的代码 就应该可以
你顺便把你的 代码 发给我 还有 步骤 呵呵
heihei
你好,你的这个问题解决了么?我也遇到了相同的问题!回复一下啊!