如果B1崩溃,如何终止仍在运行的加载项?

2020-09-04 21:29发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

当我从任务管理器中终止B1(由于不响应)或崩溃时,我的加载项仍在运行。

对于正常终止(单击X/Exit/Ctrl + Q),可以。 但是上述情况呢? 如何捕捉那些事件?

安迪

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

当我从任务管理器中终止B1(由于不响应)或崩溃时,我的加载项仍在运行。

对于正常终止(单击X/Exit/Ctrl + Q),可以。 但是上述情况呢? 如何捕捉那些事件?

安迪

付费偷看设置
发送
6条回答
wang628962
1楼-- · 2020-09-04 21:31

如果您突然终止了B1,那么B1当然不能将事件发送给

,以通知您发生故障的插件。 如果您还需要涵盖B1的突然终止

,那么您必须自行执行一些策略。

例如,您可以实施一个保持活动机制,通过该机制定期

,您可以检查UI连接是否仍处于打开状态-例如,通过调用应始终返回的某些

方法,例如读取桌面标题。 当

方法失败时,则表明连接已断开,您可以假定B1已死

,然后可以正常关闭插件。

Windows处理您可以检测到B1死亡的API,然后

响应此事件。 依此类推....

lukcy2020
2楼-- · 2020-09-04 21:31

安迪,

a)是的,我之前肯定见过此问题。 这是一个操作系统错误,但SBO问题。 修补程序通常是对此的修复。 您的问题是随机的,还是可以隔离到特定的用户/进程/机器?

b)非常罕见,但我见过,通常是在用户首次登录时出现的。 当然,仅因为任务管理器说"不响应",并不意味着该应用程序无法正常工作。 用户是否还在检查进程中的SAP Business One.exe是否占用了CPU时间?

c)我偶尔遇到Windows资源管理器崩溃的情况,但从未关闭打开的应用程序。 它应关闭Windows任务栏,但应在应用程序仍在运行的情况下自动重新打开。

a)和b)我当然建议您使用SAP支持登录,因为可能已经有解决方案,如果没有的话 ,它们可以最有效地帮助您解决问题。

亲切的问候

Owen

SC_Yao
3楼-- · 2020-09-04 21:51

一种解决方法是循环所有正在运行的进程 在您的附加组件启动时在计算机上运行(从任务管理器终止后无济于事,但在SAP运行时避免使用多重可执行文件...

示例显示代码,用于检查某个可执行文件是否运行并要求关闭(您可以跳过询问部分????

 Process [] winProcesses = Process.GetProcesses();
             bool ask = true;
             bool okToKill = false;
             对于(int i = 0; i ;
                 尝试
                 {
                     如果(current.MainModule.ModuleName =="  nameofaddon.exe ")
                     {
                         如果(询问)
                         {
                             如果(MessageBox.Show("附加组件当前正在运行。现在关闭吗?","确认",MessageBoxButtons.YesNo)== DialogResult。是)
                             {
                                 okToKill = true;
                             }
                             问=假;

                             如果(okToKill)
                             {
                                 current.Kill();
                             }
                         }
                     }
                 }
                 抓住
                 {
                    //空
                 }
             } 

如果您决定使用以上内容,请注意,如果在终端服务器上运行,则还应检查该进程的用户名。 否则您会杀死其他用户的插件the

SAP砖家
4楼-- · 2020-09-04 21:39

HI Andy,

我们有一个名为AppEvent的事件,您可以在其中捕获应用程序(b1)的关闭事件。 使用它,您可以停止执行插件。

这是代码。

私有子oApplication_AppEvent(ByVal EventType作为SAPbouiCOM.BoAppEventTypes)处理oApplication.AppEvent

尝试

如果EventType = SAPbouiCOM.BoAppEventTypes.aet_CompanyChanged或EventType = SAPbouiCOM.BoAppEventTypes.aet_LanguageChanged或EventType = SAPbouiCOM.BoAppEventTypes.aet_ServerTerminition或EventType = SAPbouiCOM.BoAppEventTypes.aet_ShutDown然后

System.Windows.Forms.Application.Exit()

如果结束

例外捕获

oApplication.SetStatusBarMessage("在菜单中:oApplication_AppEvent:"和ex.Message)

结束尝试

结束字幕。

xfwsx85
5楼-- · 2020-09-04 21:51

嗨,安迪,

这只是我的两分钱,但我更担心SBO崩溃或停止响应的原因,而不是处理附加组件。 这对您来说很常见吗?

我教用户在SBO崩溃后重新启动,因为这可以很好地解决问题,不需要编程,并且只需要在(非常感谢)罕见的崩溃情况下进行。 我不会实施技术解决方案,因为客户端可以在其台式机上运行多个SBO实例,因此可以在您的插件上运行多个实例。 编写解决方案来解决这个问题远不只是让用户重新启动????

亲切的问候

Owen

zhangjiyang1323
6楼-- · 2020-09-04 21:30

一周热门 更多>