2016-12-14 5 views
0

Я работаю над корпоративным приложением для управления временем в течение некоторого времени. Каждый раз, когда я заканчиваю новую версию, я развертываю приложение и копирую файлы .exe и .pdb и т. Д. В папку времени выполнения на сетевом сервере (под управлением Windows Server 2008 R2 Standard, все важные обновления установлены). Сотрудники получают доступ к серверу через удаленный рабочий стол, регистрируются (используя встроенный вход в систему) и регистрируют их рабочие часы.Powerbuilder 12.6 .NET Ошибка № 0, функция не найдена

Это работало нормально до середины октября этого года, когда в новых версиях моего приложения появилось прилагаемое сообщение об ошибке: PFC version of error message (номер ошибки 0, функция не найдена, строка 0, все остальное пустое.) Приложение отлично работает на моей машине разработки (Windows 8.1 Pro, все важные обновления, установленные в IDE, а также из .exe), а также чистая виртуальная установка Windows 7 (с установленной .NET Framework 4.0 и установленным Visual C++ 2010, среда выполнения пакет, выполняемый для регистрации 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 Framework, приложения все еще работают нормально. Мы не смогли воспроизвести ошибку на виртуальной машине.Единственное, что я могу думать об этом, изменилось с течением времени, когда перестали работать обновления Windows, но они, похоже, не являются причиной ошибки, поскольку приложения работают на современной виртуальной машине Windows 7.

Может ли это иметь отношение к обновлению? Что-нибудь еще произошло в середине октября? Есть что-то еще, что мне не хватает?

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать. Спасибо за внимание.

+0

Ошибка возникает в конструкторе вашего окна. Возможно, это ошибка программирования. В противном случае проверьте, была ли установлена ​​правильная платформа .NET, которую вы должны использовать. Если это не работает, создайте приложение с помощью VB.NET oder C# и повторите попытку. – user743414

+0

Я не думаю, что это ошибка программирования, поскольку это происходит даже для приложения, которое состоит только из окна и окна сообщений. Тем не менее, я проведу .NET Framework завтра. Спасибо за ответ! – SimonSharpe

ответ

1

Вот как я был в состоянии решить эту проблему: ответ

user743414 заставил меня думать о .NET Framework вместо обновлений для Windows или других вещей. Я провел некоторое исследование и выяснил, что в .NET Framework GAC есть Sybase.Powerbuilder.WPF.dll. На виртуальной машине я запускал два 12.6 .NET-пакета времени выполнения, один из которых был создан до и один, созданный после момента, когда приложения перестали работать. Каждый из них привел к регистрации другой версии этого DLL. Со старой версией .dll я смог воспроизвести ошибку, и новая версия исправила ее. Имея это в виду, я запустил новую версию пакета времени выполнения на сервере терминалов. Я должен был запустить его снова, чтобы удалить и переустановить среду выполнения, и перезагрузиться, чтобы была зарегистрирована новая версия .dll, и, в конце концов, это было, и мои приложения снова работали.

Еще раз спасибо пользователю743414!