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

У меня должна быть возможность отладки 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 есть 2 повторяющихся записи для события с кодом 10004 следующим образом:

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

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

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

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

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

Ответы [ 9 ]

6 голосов
/ 05 января 2013

Недавно я столкнулся с той же проблемой на моей 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, и дождался, когда будет достигнута точка останова. Надеюсь, это поможет.

4 голосов
/ 18 апреля 2012

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

В программе просмотра даже я вижу: Настройки разрешений по умолчанию для компьютера не предоставляют разрешения локальной активации дляПриложение 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 голосов
/ 14 апреля 2013

Я считаю, что невозможно отладить 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 проект: enter image description here
  3. Сохранить проект.
  4. Выберите Выполнить -> Пуск (F5) для отладки проекта.
  5. Выберите любойвыберите на вкладке «Отладка» и нажмите ОК: enter image description here

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

enter image description here

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

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

enter image description here

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

enter image description here

Все это происходит в Windows XP до активации WebClass.Процесс не доходит до этого этапа в 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 компонент, который, по идее, должен позволять приложениям, использующим Metabase, продолжать работу с IIS 7 +:

enter image description here

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

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

2 голосов
/ 24 апреля 2012

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

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

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

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

2 голосов
/ 05 января 2012

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

1 голос
/ 14 сентября 2012

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

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

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

Ну вот и все.

1 голос
/ 05 июня 2012

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

В нем говорится:

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

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

1 голос
/ 04 января 2012

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

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

0 голосов
/ 24 апреля 2012

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

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

...