Powerbuilder 12.6 .NET 错误号 0,找不到函数

Powerbuilder 12.6 .NET Error number 0, Function not found

我从事公司内部时间管理应用程序已有一段时间了。每次完成新版本时,我都会部署应用程序并将 .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) 的机器上产生上述错误消息。

错误似乎是由试图打开 window(框架或其他)触发的。我尝试按以下顺序使用消息框进行调试:

(在应用程序管理器对象的事件 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")

消息框 "before frame" 出现,然后出现错误消息,应用程序停止。

该应用程序使用 PFC,但简单的非 PFC 应用程序仅打开 window 并显示文本框会显示类似的行为:如果消息框出现在打开 (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,但错误文本不同。那里的解决方案包括注释掉导致错误的行,但这并不是真正的选择,因为我需要打开框架 window 和其中的其他 windows 。我也找不到有关显然未找到的特定方法的任何信息。

如前所述,我们创建了一个带有全新 Windows 7 安装的虚拟机,试图重现该问题。安装先决条件(.NET Framework 等)后,我的时间管理应用程序和非 PFC Hello World 应用程序都可以工作。我们试图排除我们的防病毒程序 (F-Secure) 作为错误来源,因此我们在虚拟机上安装了 F-Secure 并安装了所有更新,但两个应用程序仍然运行良好。我们还尝试通过在虚拟机中安装所有重要的 Windows 更新来排除 Windows 更新,但是所有重要的更新包括 .NET Frameworks 的安全和质量汇总,应用程序仍然可以正常工作。我们无法在虚拟机中重现错误。我能想到的唯一在停止工作时发生变化的是 Windows 更新,但这些似乎不是错误的原因,因为应用程序在最新的 Windows 7 个虚拟机。

难道还是跟更新有关? 10 月中旬左右是否发生了其他重大事件?还有什么我想念的吗?

如果需要更多信息,请告诉我。感谢您的关注。

我是这样解决问题的:

user743414 的回答让我想到了 .NET 框架,而不是 Windows 更新或其他东西。我做了一些研究,发现 .NET Framework GAC 中有一个 Sybase.Powerbuilder.WPF.dll。在虚拟机中,我 运行 两个 12.6 .NET 运行time 打包器,一个在应用程序停止工作的时间点之前创建,一个在应用程序停止工作的时间点之后创建。每个都会导致注册此 .dll 的不同版本。使用旧版本的 .dll,我能够重现错误,新版本修复了它。考虑到这一点,我 运行 终端服务器中 运行 时间打包器的新版本。我不得不再次 运行 它删除并重新安装 运行 时间,然后重新启动,以确保新版本的 .dll 已注册,最后它是,我的应用程序再次运行.

再次感谢user743414!