Как исправить Win7 App совместимость shim с DISABLEUSERCALLBACKEXCEPTION

у меня очень большой C# .Приложение NET4 WinForms, которое было в производстве более 18 месяцев. Мы, наконец, тестируем его на Windows 7 (Эта большая корпорация. еще не мигрировал). Приложение запускается нормально и работает, пока мы не начнем очень большой процесс (несколько выборки из БД и многие формы и элементы управления связаны).

в самый первый раз, когда мы начинаем этот процесс на Win7, что-то падает, и Win7 создает прокладку совместимости приложений вокруг нашего *.vshost.exe. Когда я заглядываю ... реестр

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionAppCompatFlagsLayers

это показывает vshost.exe стоимостью DISABLEUSERCALLBACKEXCEPTION.

Я сделал поиск и придумал очень мало.

кто-нибудь знает, какой тип кода может быть причиной? Я хотел бы исправить код, чтобы предотвратить прокладку.

1 ответов


прочитайте это сообщение в блоге тщательно, я объяснил все это:

http://blog.paulbetts.org/index.php/2010/07/20/the-case-of-the-disappearing-onload-exception-user-mode-callback-exceptions-in-x64/

короткая версия

исключения, которые пересекли границу пользователь-ядро-пользователь, были потеряны в 64-разрядных окнах.

начиная с Windows 7, когда собственное 64-разрядное приложение (т. е. не 32-разрядное на 64-разрядной ОС) аварийно завершает работу в этом мода, помощник совместимости программы уведомляется. Если приложение не имеет Манифеста Windows 7, они показывают диалоговое окно, сообщающее вам, что PCA применил прокладку совместимости приложений.

при следующем запуске приложения Windows будет эмулировать поведение сервера 2003 и сделает исключение исчезает.

для того чтобы keep эти исключения (так как вы хочу them to happen), добавьте "я предназначен для Windows 7 " запись манифеста:

<assembly>
    <!-- We were designed and tested on Windows 7 -->
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
        <application>
            <!--The ID below indicates application support for Windows 7 -->
            <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
            <!--The ID below indicates application support for Windows Vista -->
            <!--It's important to keep this too, since Vista has no idea about
                        Win7's supportedOS GUID -->
            <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/
        </application>
    </compatibility>
</assembly>