2020-09-04 21:29发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨,
当我从任务管理器中终止B1(由于不响应)或崩溃时,我的加载项仍在运行。
对于正常终止(单击X/Exit/Ctrl + Q),可以。 但是上述情况呢? 如何捕捉那些事件?
安迪
如果您突然终止了B1,那么B1当然不能将事件发送给
,以通知您发生故障的插件。 如果您还需要涵盖B1的突然终止
,那么您必须自行执行一些策略。
例如,您可以实施一个保持活动机制,通过该机制定期
,您可以检查UI连接是否仍处于打开状态-例如,通过调用应始终返回的某些
方法,例如读取桌面标题。 当
方法失败时,则表明连接已断开,您可以假定B1已死
,然后可以正常关闭插件。
Windows处理您可以检测到B1死亡的API,然后
响应此事件。 依此类推....
安迪,
a)是的,我之前肯定见过此问题。 这是一个操作系统错误,但SBO问题。 修补程序通常是对此的修复。 您的问题是随机的,还是可以隔离到特定的用户/进程/机器?
b)非常罕见,但我见过,通常是在用户首次登录时出现的。 当然,仅因为任务管理器说"不响应",并不意味着该应用程序无法正常工作。 用户是否还在检查进程中的SAP Business One.exe是否占用了CPU时间?
c)我偶尔遇到Windows资源管理器崩溃的情况,但从未关闭打开的应用程序。 它应关闭Windows任务栏,但应在应用程序仍在运行的情况下自动重新打开。
a)和b)我当然建议您使用SAP支持登录,因为可能已经有解决方案,如果没有的话 ,它们可以最有效地帮助您解决问题。
亲切的问候
Owen
一种解决方法是循环所有正在运行的进程 在您的附加组件启动时在计算机上运行(从任务管理器终止后无济于事,但在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
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)
结束尝试
结束字幕。
嗨,安迪,
这只是我的两分钱,但我更担心SBO崩溃或停止响应的原因,而不是处理附加组件。 这对您来说很常见吗?
我教用户在SBO崩溃后重新启动,因为这可以很好地解决问题,不需要编程,并且只需要在(非常感谢)罕见的崩溃情况下进行。 我不会实施技术解决方案,因为客户端可以在其台式机上运行多个SBO实例,因此可以在您的插件上运行多个实例。 编写解决方案来解决这个问题远不只是让用户重新启动????
https://github.com/valkiara/ Appocalypto
最多设置5个标签!
如果您突然终止了B1,那么B1当然不能将事件发送给
,以通知您发生故障的插件。 如果您还需要涵盖B1的突然终止
,那么您必须自行执行一些策略。
例如,您可以实施一个保持活动机制,通过该机制定期
,您可以检查UI连接是否仍处于打开状态-例如,通过调用应始终返回的某些
方法,例如读取桌面标题。 当
方法失败时,则表明连接已断开,您可以假定B1已死
,然后可以正常关闭插件。
Windows处理您可以检测到B1死亡的API,然后
响应此事件。 依此类推....
安迪,
a)是的,我之前肯定见过此问题。 这是一个操作系统错误,但SBO问题。 修补程序通常是对此的修复。 您的问题是随机的,还是可以隔离到特定的用户/进程/机器?
b)非常罕见,但我见过,通常是在用户首次登录时出现的。 当然,仅因为任务管理器说"不响应",并不意味着该应用程序无法正常工作。 用户是否还在检查进程中的SAP Business One.exe是否占用了CPU时间?
c)我偶尔遇到Windows资源管理器崩溃的情况,但从未关闭打开的应用程序。 它应关闭Windows任务栏,但应在应用程序仍在运行的情况下自动重新打开。
a)和b)我当然建议您使用SAP支持登录,因为可能已经有解决方案,如果没有的话 ,它们可以最有效地帮助您解决问题。
亲切的问候
Owen
一种解决方法是循环所有正在运行的进程 在您的附加组件启动时在计算机上运行(从任务管理器终止后无济于事,但在SAP运行时避免使用多重可执行文件...
示例显示代码,用于检查某个可执行文件是否运行并要求关闭(您可以跳过询问部分????
如果您决定使用以上内容,请注意,如果在终端服务器上运行,则还应检查该进程的用户名。 否则您会杀死其他用户的插件the
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)
结束尝试
结束字幕。
嗨,安迪,
这只是我的两分钱,但我更担心SBO崩溃或停止响应的原因,而不是处理附加组件。 这对您来说很常见吗?
我教用户在SBO崩溃后重新启动,因为这可以很好地解决问题,不需要编程,并且只需要在(非常感谢)罕见的崩溃情况下进行。 我不会实施技术解决方案,因为客户端可以在其台式机上运行多个SBO实例,因此可以在您的插件上运行多个实例。 编写解决方案来解决这个问题远不只是让用户重新启动????
亲切的问候
Owen
https://github.com/valkiara/ Appocalypto
一周热门 更多>