悬赏400分,紧急求助!!!

铁血男儿007 2019-12-23 07:56:06
我这边的业务需求是要通过调用 WebService 来远程启动服务器上的 Winform 程序。

我首先写了一个 Winform 程序,接着又写了一个 WebService 程序,在这个 WebService 程序里面通过命令行的方式,启动那个 Winform 程序,写好以后,在 Visual Studio 开发环境下,调试运行都没有问题,Winform 程序可以被正常启动,然后部署到IIS上就报错了,错误信息如下:

当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作。请指定 ServiceNotification 或 DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。
在 System.Windows.Forms.Form.Show(IWin32Window owner)
在 CCWin.CCSkinMain.Fidq2DTrRbjaq7x2UmS(Object , Object )
在 CCWin.CCSkinMain.OnVisibleChanged(EventArgs e)
在 System.Windows.Forms.Control.SetVisibleCore(Boolean value)
在 System.Windows.Forms.Form.SetVisibleCore(Boolean value)
在 System.Windows.Forms.Control.set_Visible(Boolean value)
在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
在 System.Windows.Forms.Application.Run(Form mainForm)

Program.cs 文件中的“Application.Run(new FrmMain());”这行代码报错,导致 Winform 程序启动不了,无法实现业务需求,请教大家问题究竟出在哪里,应该如何解决?

补充说明:Program.cs 文件中没有 MessageBox.Show() 之类的代码
...全文
2114 62 打赏 收藏 转发到动态 举报
写回复
用AI写文章
62 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_40670435 2020-01-02
  • 打赏
  • 举报
回复
学习中。。。。
上海程序员3 2020-01-01
  • 打赏
  • 举报
回复
换我的话,会先启动一个程序,判断数居库或文件,webserver更改数据或文件,这个程序再启动另一个程序,正常桌面程序才能直接启动桌面程序。
上海程序员3 2020-01-01
  • 打赏
  • 举报
回复
iis里,.net信任级别,改成high试一下
iver82 2020-01-01
  • 打赏
  • 举报
回复
效果怎么样?
luj_1768 2019-12-31
  • 打赏
  • 举报
回复
相关的事需要有经验的系统管理员指导:主要问题是程序运行模式不正确,如果不是运行在用户交互模式下、显示模式对话框或窗体是无效操作;需要指定ServiceNotification或者DefaultDesktopOnly样式。
她爱吃西红柿 2019-12-31
  • 打赏
  • 举报
回复
服务中 启动外部的exe程序 需要借助 一个动态库 ,不然你是看不到exe界面的。引用:Cjwdev.WindowsApi.dll var appStartpath = @"D:\Project\third.exe"; int _currentAquariusProcessID; /*appStartpath设置为全路径地址*/ 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)System.Runtime.InteropServices.Marshal.SizeOf(startinfo); try { 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; return true; } catch (Exception ex) { return false; }
卖水果的net 2019-12-30
  • 打赏
  • 举报
回复
这个可能和权限有关系,IIS服务在不登录的情况可以运行,但是你的winform 不能运行。 开发环境下,实际上已经有了登录,所以能跑起来。
comres 2019-12-30
  • 打赏
  • 举报
回复
引用 24 楼 stacksoverflow 的回复:
我是搞Java的不懂C#,给你提个建议, 做一个能启动winform的程序,然后监控一个文件比如c:/temp/start.flg webservice请求来了后,写文件c:/temp/start.flg winform的程序启动成功后,删除这个临时文件。
大哥,别人那个是只读,没有写入权限
smxy520 2019-12-29
  • 打赏
  • 举报
回复
搞不定就重启看看
泡泡龙 2019-12-29
  • 打赏
  • 举报
回复
https://www.cnblogs.com/yechangzhong-826217795/p/8303867.html
泡泡龙 2019-12-29
  • 打赏
  • 举报
回复
CreateProcessAsUser
??de??i 2019-12-27
  • 打赏
  • 举报
回复
不错能用谢谢
songweishun 2019-12-27
  • 打赏
  • 举报
回复
在服务器,应创建windows服务
燕_子 2019-12-27
  • 打赏
  • 举报
回复
aa
ziwu2015 2019-12-27
  • 打赏
  • 举报
回复
学习一下吧。。。
逆天小北鼻 2019-12-27
  • 打赏
  • 举报
回复
没错,我是围观的
秋的红果实 2019-12-27
  • 打赏
  • 举报
回复
Winform 程序是用来做实时监控的,需要有界面来显示监控结果,所以不能改成Windows服务 ==> 没见过这种的,在服务器里显示结果? 不知道你的真正业务需求是什么,我猜想,你可以改成C/S架构的,不要分什么客户端,服务端,就是分布式处理 想要监控数据,主动请求对方,对方发数据自己接收就行;或者发送发者在适当时候主动广播数据给要看监控数据的一端 用wcf或者socket 服务器里弄个winform,那么,想看监控数据的一端,要登陆到服务器吗? 还是怎么看 用数据存储中转,也是不建议的 用一个服务写数据到存储(如数据库或者文本),再用web页面读取,这样会更复杂
gs0038 2019-12-26
  • 打赏
  • 举报
回复
直接远程登录服务器的时候再打开Winform 程序不行吗,反正要看的时候肯定要登录服务器的不是吗?
雪狼孤竹 2019-12-26
  • 打赏
  • 举报
回复
没太搞明白这逻辑,服务器端的一个监控显示窗口,需要客户端的发起?那这个监控窗口还需要人为关闭或自行关闭?
其实你没必要把它们整在一起,各自干各自的工作,有交互的地方也就是数据。
一个负责写数据,一个负责读数据,遇到要求内的数据,做以提示就好。

或者是没太明白你这个项目的真正意义,以上仅为个人看法,如有雷同、实属巧合!
qq_45234026 2019-12-26
  • 打赏
  • 举报
回复
那10个人通过webservice来访问,就开10个exe ? 那100个人。。。。。
加载更多回复(42)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧