2012-01-04 3 views
9

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

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

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

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

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

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

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

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

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

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

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

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

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

+0

Привет, Уоррен, я вижу, вы снова кладете щедрость на это. Одна вещь, которую я заметил - вы не упоминаете, какой SP VS6 вы используете. Я знаю, что это слишком просто, но вы используете SP6? –

+0

Да. Service Pack 6. –

+0

Уоррен: еще одна информация: я могу запустить Run -> Start без сервисов W3SVC или IISAdmin, даже начатых. Это означает, что проблема связана с VB6, а не с блокировкой ОС с IIS. –

ответ

3

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

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

  1. Установка VB6 и SP6.
  2. Создать новый проект IIS Application: enter image description here
  3. Сохранить проект.
  4. Выберите Run -> Start (F5) для отладки проекта.
  5. Выберите любую опцию на Debugging вкладке и нажмите OK: enter image description here

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

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+, в отличие от предыдущих версий, не использует Metabase, и в IIS 7+ нет службы IIS Admin Service. Можно установить IIS Metabase and IIS6 compatibility компонент, который, в теории, должно позволить приложениям, использующим Metabase продолжать работать с IIS 7+:

enter image description here

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

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

+0

Вы должны получить награду за ответ, но я не знаю, куда отправилась щедрость? –

1

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

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

+0

Я не уверен, что понимаю, что вы предлагаете. Вы имеете в виду запустить что-то вроде procmon, чтобы определить, что IDE пытается сделать при запуске? –

+0

Нет, я думаю о том, чтобы просто копировать код Webclass где-нибудь, вы можете * отладить его. Конечно, реальный ответ, скорее всего, будет: перестроить приложение в чем-то, кроме VB6. –

+1

Уверен, что можно было бы разрешить отладку методом кусочка муки, реплицируя некоторые отдельные методы вне приложения IIS, хотя не было бы никакого способа получить доступ к экземплярам объекта Request/Response/Server (или тег процесса или пользовательские события в пользовательские веб-элементы). Моя теория по-прежнему заключается в том, что должен быть способ просто отладить ее с помощью настройки уровня безопасности ОС. –

2

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

+0

Приложение даже запускается, поэтому невозможно записать файл журнала. Ошибка возникает сразу после нажатия F5 для начала отладки. Проблема возникает с любым приложением IIS независимо от кода. –

+0

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

+2

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

4

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

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

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

и

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

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

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

Затем я передаю локальную активацию по умолчанию в компоненте услуг/My Computer (свойства) COM Security, запуск и активация разрешения

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

Server object error 'ASP 0178 : 80070005' 

Server.CreateObject Access Error 

/app.asp, line 4 

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

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

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

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

+1

Я ценю информацию. Тем не менее, я уже открыл параметры безопасности COM для «Evyerone» для всего. Однако у меня нет событий, зарегистрированных в средстве просмотра событий, что указывает на проблему с безопасностью. Все, что я вижу, это сообщение «Access Denied» из VB IDE. Я тоже пробокал, но ничего не торчит. –

+0

Ну, щедрость истек, и я не получил ответа, который решил мою проблему. Однако, основываясь на полученных комментариях, я должен сказать, что вы предприняли самую глубокую попытку определить основную проблему безопасности. Поэтому я награждаю вас щедростью. Однако, пожалуйста, дайте мне знать, если вы решите проблему самостоятельно и обновите ответ. Благодаря! –

+0

@BoAndersen Вы уверены, что вы отлаживали «приложение IIS», а не только компонент VB6, используемый из приложения ASP? «Приложение IIS» - это особый тип проекта VB6. –

2

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

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

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

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

+0

Это не похоже на проблему. Возможно, я не понимаю ваше предложение. Виртуальный каталог требует аутентификации, такой как Windows или Basic auth, поскольку это единственный способ, которым будет работать отладка. Однако при непосредственном просмотре веб-приложения из IIS он не запускает отладку с VB, и такая же проблема возникает при попытке начать отладку. –

+0

@WarrenRox Загрузить VB IDE с проектом, нажмите кнопку «Пуск». Установите точку останова где-то на странице по умолчанию. Перейдите в веб-приложение, введите учетные данные. Точка останова должна ударить. –

+0

@WarrenRox Кроме того, каковы ваши perms в каталоге, на который указывает виртуальный каталог? Я дал ИНТЕРАКТИВНЫЕ, проверенные пользователи, пользователи и полный контроль SYSTEM. –

0

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

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

+0

Я ценю ваши отзывы. Однако, как указано, я хочу отладить приложение IIS и не запускаться в режиме отладки. Я считаю, что я могу запустить простую COM-библиотеку DLL в VB6 IDE и вступить в код после того, как приложение IIS вызовет его. Но проблема в том, что мне нужно иметь возможность отлаживать фактическое приложение IIS, и оно не будет запускаться с указанной выше общей ошибкой. –

+0

Уоррен, я наткнулся на эту статью в КБ, которая специально посвящена проблемам, возникающим в результате отладки приложений VB6 WebClass и проблем, которые могут возникнуть из-за них. Вероятно, вы уже прошли эти шаги, но я отправлю ссылку здесь для справки, если она содержит информацию, которую вы, возможно, не имели ранее: http://support.microsoft.com/default.aspx?scid= kb; EN-US; 259725 –

+0

Спасибо. Я прочитал эту статью несколько лет назад в Windows 2000 и XP, и это было очень актуально для этих операционных систем. Тем не менее, модель безопасности в Windows 7 выглядит совершенно по-другому, и поскольку у VB6 больше нет поддержки MS, никогда не будет новой подобной статьи KB для Windows 7. Увы, поклонникам VB6 не придется подключаться к этому пока кто-нибудь не найдет решение. Благодарю. –

1

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

Он гласит:

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

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

+1

Я полностью понимаю, что он не поддерживается. Тем не менее, я надеюсь найти кого-то, достаточно умного, чтобы понять основную проблему и придумать возможное обходное решение. Все, кроме веб-приложений IIS, похоже, отлично работает/отлаживается. На данный момент я фактически запускаю VB IDE в виртуальной машине, хотя я считаю менее желательным запускать среду разработки в виртуальной машине, если бы мог использовать мой основной рабочий стол. То есть не хотите пропускать сообщения MSN, электронные письма или вообще использовать несколько мониторов и т. д. Тем не менее, ваш комментарий действителен и оценен. –

1

У меня была эта проблема сегодня 14 сентября 2012 года и удалось решить ее самым простым способом, у меня есть debug dlls Мне нужен визуальный базовый 6.0 с XP. У меня не было проблем, но я изменил его на Windows 7, проблема с iis7, я читал на многих форумах и блогах, но ничего не было, даже я сделал этот блог, и, в конце концов, я не исправил проблему следующим образом: «Службы компонентов» -> «Компьютеры» - щелкните правой кнопкой мыши «Свойства» -> затем нажмите «Безопасность» вкладка COM-> раздел Разрешения запуска и активации -> Изменить по умолчанию ->, а затем добавить учетную запись Local Service и предоставить все разрешения. Я уточняю, для меня это работало, чтобы отлаживать 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 (S-1-5-19) в адресе LocalHost (с LRPC). Это разрешение безопасности может быть изменено с помощью инструмента администрирования служб компонентов «

Вы видите, что NT \ AUTHORITY \ NETWORK SERVICE LOCAL SERVICE костяк счета.

Ну вот и все.

+0

Прежде всего, большое спасибо за предоставление рекомендации по решению этой проблемы! Я попробовал вашу рекомендацию по добавлению учетной записи «Локальная служба» при запуске и активации разрешений, и я все еще получаю сообщение «Произошла неуказанная ошибка» при попытке использовать любое приложение IIS для отладки. Есть ли что-то, чего я еще не вижу в вашем решении? –

+0

Кроме того, вам нужно сделать то, что он говорит на этой странице http://support.microsoft.com/kb/259725/en-us –

+0

Я попытался добавить VB ASP Debugging в DCOM с соответствующей безопасностью, когда у меня была оригинальная проблема , Это не разрешает. –

5

Я недавно испытал ту же проблему на своей 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. Щелкните правой кнопкой мыши узел Консоль Root/Component Services/Computers/My Computer. Выберите «Свойства». Выберите вкладку «Безопасность COM». Нажмите «Изменить значение по умолчанию» в группе «Разрешения доступа». Нажмите «Добавить». Введите пользователя, указанного в журнале событий (мой был IUSR). Нажмите «ОК». Повторите для группы «Запуск и активация». Выберите ОК во всех диалоговом окне.

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

+0

Большое спасибо за предложение.Я действительно вижу ошибки в журнале системных событий Windows следующим образом: DCOM получил ошибку «1326» и не смог войти в систему DOMAIN \ USERID для запуска сервера: {70F214BA-94E2-4BDF-8F30-32CB4A905E4D}. Я нахожусь в домене, и сообщение об ошибке включает в себя действительный домен \ имя пользователя. Однако я перешел к тому, чтобы добавить «Все» к разрешениям DCOM, и я все еще получаю ту же ошибку в среде IDE при попытке отладки и одной и той же ошибки снова и снова в журнале событий. Я искал реестр, и указанный GUID - это фактически VB6. –

+0

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

+0

Я несколько раз перезагрузил свою машину в процессе устранения неполадок. Если вы можете доказать, что на самом деле вы успешно отлаживали веб-приложение IIS на ОС Windows 7 с изображением необходимых настроек, я предлагаю щедрость всех моих очков репутации. Это предложение распространяется на всех, кто может к тому же. –

Смежные вопросы