.NET Windows 7 конкретные ошибки - PullRequest
3 голосов
/ 14 октября 2010

У меня есть приложение .NET и настройка для него.Построен с использованием VS 2005.

Машина для разработки - Windows XP SP3.

Однажды кто-то установил его под Windows7.И получите следующие ошибки

WinForm ThreadException

System.AccessViolationException: Попытка чтения или записи защищенной памяти.Это часто указывает на то, что другая память повреждена. в System.Windows.Forms.UnsafeNativeMethods.IOleObject.DoVerb (Int32 iVerb, IntPtr lpmsg, IOleClientSite pActiveSite, Int32 lindex, IntPtr COMRECT hwnd) в System.Windows.Forms.AxHost.DoVerb (глагол Int32) в System.Windows.Forms.AxHost.InPlaceActivate ()

другой

Исключение типа 'System.Windows.Forms.AxHost + InvalidActiveXStateException' было сгенерировано.Метод «Отключить» не может быть вызван в это время.

Теперь, интересно, где была проблема, и установил VS 2005 на эту Windows7.Теперь решение компилируется и запускается без исключений.Я собрал установку и переустановил только что созданную установку на этом компьютере с Win7 ...

Я получил исключения.Почему это так?

Приложения не имеют исключений, запускаемых с VS, но выдают его при запуске установленного исполняемого файла ...

Однако я успешно (без исключений) проверил установленное приложение на некоторыхмашины с ОС> Win XP: Windows 7 (x64) и Windows Server 2008 (x64) ...

Изучая журналы, я обнаружил код, выдающий исключение:

Panel p = new Panel();
p.Margin = new Padding(0);
p.Dock = DockStyle.Fill;
p.Controls.Add(display); // 'display' is an ActiveX control instance

Logger.LogMessage("before");

this.tableLayoutPanel.Controls.Add(p); // protected memory EXCEPTION

Logger.LogMessage("after");

Итак, я вижу « до », затем AccessViolationException: Attempted to read or write protected memory... не вижу « после » ...

Каковы общие причины таких исключений?

Подробности

  • Я использую в приложении некоторые сторонние ActiveX;
  • Сэмплы (написанные на C ++), использующие этот ActiveX, хорошо работают на этом компьютере.
  • Решение предназначено для платформы x86;
  • Мне удалось без ошибок запустить приложение на ** Windows Server 2008 (x64) и на Windows 7 (x64);
  • Пробовал в режиме 'Windows XP Compatibility (SP2, SP3)' - тот же результат (исключения).
  • Попытался установить приложение в другую папку, ProgramFiles.Я использовал C: \ TestFolder в качестве пути установки - результат тот же: AccesViolationException ....

Ответы [ 4 ]

5 голосов
/ 14 октября 2010

Ух, процессор x84, никогда не видел ни одного из них ;-)) Что вы имеете в виду, вероятно, x64 ...

Ваша установка Windows XP является 64-битной?Вероятно, это проблема преобразования 32/64-бит, а не проблема Windows 7.

Forms.UnsafeNativeMethods.IOleObject

Вы вводите в заблуждение вашу ActiveX DLL?

Это 32-битная DLL или 64-битнаядлл?32-битные DLL не будут работать в 64-битной среде и наоборот.

Если вы позвоните через COM, у вас может быть шанс.Но по крайней мере в Linux тип данных C / C ++ имеет 8 байтов в 64-битном режиме, а 4 байта в 32-битном режиме.

Попробуйте указать платформу x86 (= 32 бит) в .NETприменение.

2 голосов
/ 14 октября 2010

Похоже, вы используете элемент управления ActiveX, который имеет проблемы совместимости с Windows 7.

1 голос
/ 14 октября 2010

Скорее всего, вы используете более старую версию XP, которая не имеет защиты выполнения данных. Это включено по умолчанию в Vista и 7 и вызовет исключения.

Скорее всего, вы пишете в случайные указатели или в память, которая уже была освобождена. Другими словами, у вас есть ошибки. Тот факт, что он хорошо работает на XP, не означает, что в этом нет ничего плохого.

0 голосов
/ 18 октября 2010

Присоедините программу к собственному отладчику и проверьте трассировку стека.

У вас могут быть проблемы с глобальным перехватом или расширением на этой машине, которое мешает вашему компоненту COM.

...