Как я могу отладить приложение VB6 IIS в Windows 7 64-битной

У меня должна быть возможность отладки IIS-приложения Visual Basic 6 в 64-разрядной версии Windows 7. Не только для одной проблемы, но и для дальнейшего развития.

Попытка отладки приводит к ошибке "Произошла неуказанная ошибка" из среды выполнения WebClass.

Если я не отлаживаю и просто получаю доступ к скомпилированному веб-классу, страница загружается просто отлично. Поэтому я не верю, что с регистрацией / настройкой приложения что-то не так, скорее это связано с тем, что безопасность ОС Windows блокирует IDE VB6 от подключения к IIS и позволяет отлаживать его.

Вот все, что я пробовал:

  1. Отключен контроль учетных записей пользователей (UAC) и перезагружен.
  2. Изменена защита компонента DCOM для диспетчера отладки машины (MDM) и назначены разрешения "Все" для запуска и активации.
  3. Вручную добавлена ​​запись DCOM для "70F214BA-94E2-4bdf-8F30-32CB4A905E4D", которая является IDE VB6 и которой назначены разрешения для запуска и активации "Все".
  4. Отключенный брандмауэр Windows
  5. Запустил приложение (VB6.exe) в режиме совместимости Windows XP SP3 с опцией запуска от имени администратора.
  6. Создан новый пул приложений IIS с идентификатором, установленным для учетной записи администратора. Установите режим конвейера приложения на классический и включите поддержку 32-битных устаревших приложений.

Это исчерпало мой большой опыт того, что можно попробовать. Если я создаю приложение VB6 для Windows или элемент управления ActiveX, я могу легко запускать и отлаживать.

Я столкнулся с очень похожей проблемой в Windows Server 2003, хотя новая установка W2K3 решила эту проблему.

В журнале просмотра событий системы Windows для идентификатора события 10004 есть две повторяющиеся записи:

DCOM получил ошибку "1326" и не смог войти в домен DOMAIN\User для запуска сервера: {70F214BA-94E2-4BDF-8F30-32CB4A905E4D}

Где DOMAIN\User - это моя учетная запись домена, а упомянутый выше GUID - это запись DCOM, которую я добавил для отладки VB ASP.

Единственная дополнительная информация, которую я могу предложить, - это то, что 64-разрядная версия Windows 7 работает на виртуальной машине, хотя я пытаюсь выполнить отладку на консоли. У меня возникли проблемы с отладкой на виртуальных машинах без подключения к консоли.

Если кто-то может предложить какие-либо дополнительные предложения, я буду очень признателен.

Если кто-нибудь сможет это выяснить и успешно отладить веб-приложение IIS в ОС Windows 7 с необходимыми настройками, я предложу текущую награду в 300 баллов!

9 ответов

Решение

Я считаю, что это не возможно для отладки VB6 IIS Application в IDE на любой версии Windows, более новой, чем Windows XP (возможно, ситуация аналогична серверной разновидности Windows). Основной причиной проблемы, по-видимому, являются существенные различия между IIS 6 и IIS 7+. Конечно, официальной документации по этой теме нет, поэтому я более подробно остановлюсь ниже.

Во-первых, имеет смысл вспомнить проблему. Многие хорошие люди, кажется, забывают, что IIS Application точный термин, относящийся к специальному типу проекта VB6 в этом контексте. Я смог воспроизвести ошибку, выполнив следующие действия на Win7 Ultimate x64 SP1, Win7 Ultimate x86 SP1 и Vista Enterprise x86 SP2:

  1. Установите VB6 и SP6.
  2. Создать новый IIS Application проект:
  3. Сохраните проект.
  4. Выберите Run -> Start (F5), чтобы отладить проект.
  5. Выберите любой параметр на вкладке "Отладка" и нажмите ОК:

Сразу после этого в IDE VB6 появляется сообщение об ошибке:

Давайте рассмотрим, что происходит, когда тот же сценарий выполняется в Windows XP. Когда начинаешь отлаживать VB6 IIS Application:

  • VB6 IDE запускает службу IIS, если она не запущена:

  • VB6 IDE предлагает выбрать виртуальный каталог IIS:

Все это раньше происходило на Windows XPWebClass активирован Процесс не доходит до этой стадии в Windows 7.

Ясно, что VB6 IDE пытается выполнить некоторые административные задачи в IIS, чтобы иметь возможность отлаживать WebClass, Можно углубиться немного глубже с помощью Process Monitor и API Monitor. Понятно, что VB6.exe использует COM-интерфейсы IIS Admin Service. Плохая новость заключается в том, что IIS 7+, в отличие от предыдущих версий, не использует метабазу и в IIS 7+ нет службы администрирования IIS. Можно установить IIS Metabase and IIS6 compatibility компонент, который, по идее, должен позволять приложениям, использующим метабазу, продолжать работу с IIS 7+:

К сожалению, установка не решает проблему.

Есть предположения, что ваша проблема может быть вызвана неадекватными разрешениями запуска и активации для компонентов COM. Я боюсь, что все эти предложения бесполезны. Подобные ошибки всегда сопровождаются связанными событиями ошибок в журнале системных событий. Там нет таких событий в этом случае.

Недавно я столкнулся с той же проблемой на моей 64-битной машине с Windows 7. Решение, которое работало для меня, состояло в том, чтобы проверить журнал событий Windows (система) для определенной ошибки DCOM. Это ошибка, которая у меня была:

Настройки разрешений по умолчанию для компьютера не предоставляют разрешения локальной активации для приложения COM-сервера с CLSID {17C2D338-9569-4022-8AF2-52A3A124F22D} и APPID {17C2D338-9569-4022-8AF2-52A3A124F22D} пользователю NT AUTHORITY\IUSR SID (S-1-5-17) от адреса LocalHost (с использованием LRPC). Это разрешение безопасности можно изменить с помощью инструмента администрирования служб компонентов.

Ключевым моментом для меня было дать разрешение на запуск встроенной учетной записи IUSR и активацию. После попытки дать этому пользователю разрешение на отдельные компоненты DCOM и не удалось, я решил добавить пользователя к разрешениям DCOM по умолчанию для компьютера. Вы можете сделать это следующим образом:

Запустите dcomcnfg. Щелкните правой кнопкой мыши узел "Корень консоли" / "Службы компонентов" / "Компьютеры" / "Мой компьютер". Выберите Свойства. Выберите вкладку "Безопасность COM". Нажмите "Изменить настройки по умолчанию" в группе "Права доступа". Нажмите "Добавить". Введите пользователя, указанного в вашем журнале событий (мой был IUSR). Нажмите ОК. Повторите эти действия для группы "Разрешения на запуск и активацию". Нажмите OK во всех диалоговых окнах.

Мне не нужно было перезагружать машину, чтобы эти настройки вступили в силу. Я использовал тот же метод для отладки dll VB6, который я использовал в XP, т.е. запустил dll под VB6 (автоматическое выполнение), установил точку останова, перешел на страницу, которая обращалась к dll, и дождался, когда будет достигнута точка останова. Надеюсь это поможет.

Не знаю, поможет ли это вам дальше... Я исследую эту же проблему для себя.

В четном окне просмотра я вижу: настройки разрешений по умолчанию для компьютера не предоставляют разрешения локальной активации для приложения COM-сервера с

CLSID 
{08855658-7A0B-4EF9-99B2-0AF875B3E62A}

а также

APPID 
{08855658-7A0B-4EF9-99B2-0AF875B3E62A}

пользователю NT AUTHORITY\IUSR SID (S-1-5-17) с адреса LocalHost (используя LRPC). Это разрешение безопасности можно изменить с помощью инструмента администрирования служб компонентов.

... так что я пытаюсь предоставить локальную активацию "Всем" - просто чтобы посмотреть, смогу ли я ее отключить. -Я не могу.

Затем я предоставляю локальную активацию по умолчанию в компонентных службах / Мой компьютер (свойства) COM Безопасность, разрешения на запуск и активацию

Я все еще не могу отладить, но я больше не получаю ошибки в средстве просмотра событий. В браузере я получаю

Server object error 'ASP 0178 : 80070005'

Server.CreateObject Access Error

/app.asp, line 4

Призыв к Server.CreateObject не удалось при проверке разрешений. Доступ запрещен к этому объекту.

Приведенный выше CLSID - это мое приложение vb6, но реестр указывает на vb6debug.dll (который выглядит правильно). соответствие progID и т. д.

Каждому предоставлены разрешения на vb6debug.dll и другие файлы.

Следующим шагом будет procmon или что-то в этом роде, чтобы увидеть, что происходит.

Человек, я могу сочувствовать. Я потратил на это почти 3 человеко-дня, и у меня до сих пор нет решения, которым я невероятно доволен, но оно работает, поэтому я "сдался" в поиске правильного решения и пошел с этим, потому что Я просто не могу тратить больше времени на ресурсы.

В диспетчере IIS выберите виртуальный каталог -> Аутентификация.
- отключить анонимную аутентификацию
- включить базовую аутентификацию

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

Это фактически означает, что я должен проходить аутентификацию себя в virtdir каждый раз, когда я впервые начинаю отладку, но это небольшая цена, которую нужно заплатить, чтобы наконец-то снова иметь функционал отладки.

Рассматривали ли вы запись файла журнала? Это довольно просто, и вы можете начать именно там, где код, скорее всего, вызовет ошибку. Я предлагаю создать функцию, которая принимает несколько параметров, таких как имя Sub/Function, объект Err и необязательную дополнительную строку, чтобы вы могли включить дополнительную информацию, например, на каком этапе был ваш код. В обработчике ошибок вызовите передачу вашей функции ваши параметры.

Не могли бы вы скопировать информацию, отправленную в VB6-часть приложения, и проверить ее с консоли?

Я имею в виду, это грубо, но мы говорим об отладке гибридного приложения IIS VB6.

У меня была эта проблема сегодня, 14 сентября 2012 года, и мне удалось решить ее самым простым способом, у меня есть отладочные библиотеки. Мне нужна Visual Basic 6.0 с XP. У меня не было проблем, но я изменил ее на Windows7, и была проблема с iis7, Я читал на многих форумах и блогах, но ничего не делал, даже я сделал этот блог, и, в конце концов, я исправил проблему следующим образом: Службы компонентов-> Компьютеры-> Щелкните правой кнопкой мыши Свойства->, затем перейдите на вкладку Безопасность COM-> раздел Разрешения на запуск и активацию-> Изменить по умолчанию ->, а затем добавить учетную запись локальной службы и дал все разрешения. Я проясняю, для меня это работало для локальной отладки dll в Visual Basic 6.0, но не в том случае, если это хорошо или единственное решение, я думаю, что я справился хорошо, это должно быть сделано над тем, что они говорят на других форумах, теперь хорошо на Страница Microsoft http://support.microsoft.com/kb/899965/es говорит то же самое, но говорит, что добавление учетной записи NETWORK SERVICE, как я сделал, и я работал на ошибку, что я приказал Viewer событий:

"Установка разрешений, установленных по умолчанию на вашем компьютере, не дает разрешения" Локальная активация "приложению COM-сервера с CLSID {95D14525-F934-4D4F-9B33-2CE753FAF3B0} и APPID {95D14525-F934-4D4F-9B33-2CE753FAF3B0} пользователю NT AUTHORITY \ LOCAL SERVICE с SID (S-1-5-19) в адресе LocalHost (с LRPC). Это разрешение безопасности можно изменить с помощью инструмента администрирования Component Services ".

Вы видите, говорит NT \ AUTHORITY \ NETWORK SERVICE LOCAL SERVICE учетная запись кости.

Ну вот и все.

Я думаю, вы можете быть уверены, что проблема не в том, что Microsoft не хочет, чтобы она работала, а просто в том, что она не может работать. Вам известен этот документ?: http://msdn.microsoft.com/en-us/vstudio/ms788708.aspx

Говорится:

Visual Basic 6.0 IDE никогда не предлагался в собственной 64-разрядной версии, равно как и 32-разрядная IDE не поддерживалась в 64-разрядной Windows. Разработка VB6 на 64-битной Windows или любой собственной архитектуре, кроме 32-битной, не поддерживается и не будет поддерживаться.

Я тоже пытался и не смог, поэтому решил запустить 32-битную ОС на виртуальной машине, и тогда она работает безупречно. Я думаю, это связано с тем, что отладчик подключается к ядру, чтобы иметь возможность запускать отладчик.

Похоже, вы хотите, чтобы VB6 IDE запускалась в отладчике при создании экземпляра приложения, и это не удалось. Вы пытались запустить IDE VB6 в режиме отладки для размещения вашего COM-компонента, установить точку останова в вашем источнике, а затем посмотреть, не вызовет ли доступ к странице, которая использует компонент, то точку останова в отладчике? То есть выньте активацию VB6 IDE из цикла - его запуск должен просто заставить CLSID для приложения указывать на экземпляр среды выполнения IDE в качестве хоста COM.

Прошло много времени с тех пор, как я занимался разработкой в ​​VB6, поэтому некоторые детали могут быть отрывочными, но я помню, что отладка COM-серверов потребовала некоторой гимнастики, и одним из решений было использование отдельного экземпляра VB в качестве COM-выхода. хост сервера

Другие вопросы по тегам