我已经在公司内部时间管理应用程序上工作了很长一段时间。每次我完成新版本时,我都会部署应用程序并将.exe和.pdb等复制到网络服务器上的运行时文件夹中(运行Windows Server 2008 R2 Standard,安装所有重要更新)。员工通过远程桌面访问服务器,登录(使用集成登录)并记录他们的工作时间。
这个工作正常,直到今年10月中旬左右,当我的应用程序的新版本产生附加的错误消息:PFC version of error message(错误号0,找不到功能,第0行,其他一切空白。)应用程序在我的开发机器上运行正常(Windows 8.1 Pro,安装了所有重要更新,在IDE中以及从.exe)以及干净的虚拟Windows 7安装(安装了.NET Framework 4.0和Visual C ++ 2010 Redistributable) ,运行时打包程序执行以注册dll等)。它在服务器以及同事(Windows 10)计算机上生成上述错误消息。
尝试打开窗口(框架或其他方式)似乎触发了错误。我尝试按以下顺序使用消息框进行调试:
(在应用程序管理器对象的事件pfc_open中)
(populate sqlca from .ini, perform integrated logon, etc.)
MessageBox("before frame", "before frame")
OpenWithParm(w_frame, ls_user)
MessageBox("after frame", "after frame")
出现消息框“在帧之前”,然后出现错误消息并且应用程序停止。
应用程序使用PFC,但只是打开一个窗口并显示文本框的简单非PFC应用程序显示类似的行为:如果消息框出现在打开(w_window)之前,它会显示,否则应用程序会显示此错误消息:basic hello world error并暂停。
我正在使用Powerbuilder .NET 12.6.0,Build 4108(我相信这是最新的EBF版本)。旧版本的应用程序仍可在服务器上运行。似乎在某个日期之后编译的应用程序在服务器上不起作用。
在试图打开其中一个应用程序(系统语言为德语,我将德语单词翻译成英语)之后,这是PBTrace的摘录:
Method: Void _init()
Exception Type: System.MissingMethodException
Exception Message: System.MissingMethodException: Method not found: "Void Sybase.PowerBuilder.WPF.PBWindow.set_RelevantSession(Sybase.PowerBuilder.WPF.PBSession)".
at c__w_window._init()
at c__w_window..ctor() in c:\work\pb126\hello_world_ohne_pfc.out\hello_world_ohne_pfc_w_window_w.cs:Line 0.
Exception Source: hello_world_ohne_pfc
Exception StackTrace: at c__w_window._init()
at c__w_window..ctor() in c:\work\pb126\hello_world_ohne_pfc.out\hello_world_ohne_pfc_w_window_w.cs:Line 0.
我查看了错误编号的文档,它们似乎从1开始(除以零),没有数字0的条目。我在网上搜索类似问题的解决方案,我发现了其他一些错误编号的情况0,但不同的错误文本。那里的解决方案包括注释导致错误的行,但这不是一个真正的选项,因为我需要打开框架窗口和其他窗口。我也找不到任何显然没有找到的特定方法的信息。
如前所述,我们创建了一个带有全新Windows 7安装的虚拟机,试图重现该问题。安装必备组件(.NET Framework等)后,我的时间管理应用程序以及非PFC Hello World应用程序都可以正常工作。我们试图排除我们的反病毒程序(F-Secure)作为错误的来源,因此我们在虚拟机上安装了F-Secure并安装了所有更新,但两个应用程序仍然正常工作。我们还尝试通过在虚拟机中安装所有重要的Windows更新来排除Windows更新,但是所有重要的更新(包括.NET框架的安全性和质量汇总),应用程序仍然可以正常工作。我们无法在虚拟机中重现错误。我能想到的唯一一件事就是在事情停止工作的时候改变了Windows更新,但这些似乎不是导致错误的原因,因为应用程序在最新的Windows 7虚拟机中工作。 / p>
它还能与更新有关吗?在10月中旬左右发生了其他重大事件吗?还有什么我想念的吗?
如果需要更多信息,请告知我们。谢谢你的关注。
答案 0 :(得分:1)
以下是我能够解决问题的方法:
user743414的回答让我想到了.NET框架而不是Windows更新或其他东西。我做了一些研究,发现.NET Framework GAC中有一个Sybase.Powerbuilder.WPF.dll。在虚拟机中,我运行了两个12.6 .NET运行时打包程序,一个在之前创建,一个在应用程序停止工作的时间点之后创建。每个都导致这个.dll的不同版本被注册。使用旧版本的.dll,我能够重现错误,新版本修复了它。考虑到这一点,我在终端服务器中运行了新版本的运行时包装程序。我不得不再次运行它以删除并重新安装运行时,并重新启动,以确保.dll的新版本已注册,最后它是,并且我的应用程序再次工作。
再次感谢user743414!