如何在Windows 7 64位上调试VB6 IIS应用程序

时间:2012-01-04 15:02:19

标签: windows-7 vb6 ide iis-7.5 iis-metabase

我需要能够在Windows 7 64位上调试Visual Basic 6 IIS应用程序。不只是针对单个问题,而是针对持续发展。

尝试调试会导致WebClass运行时出现错误“发生了未指定的错误”。

如果我不调试并只是访问已编译的webclass页面加载就好了。因此,我不认为应用程序的注册/配置有任何问题,但这与Windows操作系统安全性有某种关联,阻止VB6 IDE挂钩进入IIS并允许它进行调试。

以下是我尝试过的所有事情:

  1. 已禁用用户帐户控制(UAC)并重新启动。
  2. 修改了机器调试管理器(MDM)的DCOM组件安全性,并为其指定了“Everyone”启动和激活权限。
  3. 手动添加“70F214BA-94E2-4bdf-8F30-32CB4A905E4D”的DCOM条目,这是VB6 IDE,并指定“Everyone”启动并激活权限。
  4. 已禁用Windows防火墙
  5. 以Windows XP SP3兼容模式运行应用程序(VB6.exe)并以管理员身份运行。
  6. 创建了一个新的IIS应用程序池,其标识设置为管理员帐户。将应用程序管道模式设置为经典和启用的32位遗留应用程序支持。
  7. 这耗尽了我对尝试事物的丰富经验。如果我创建VB6 Windows应用程序或ActiveX控件,我可以轻松启动和调试。

    我在Windows Server 2003上遇到过类似的问题,尽管全新安装的W2K3解决了这个问题。

    在Windows系统事件查看器日志中,事件ID 10004有两个重复的条目,如下所示:

    DCOM收到错误“1326”,无法登录DOMAIN \ User以运行服务器: {70F214BA-94E2-4BDF-8F30-32CB4A905E4D}

    其中DOMAIN \ User是我的域帐户,上面提到的GUID是我为VB ASP调试添加的DCOM条目。

    我必须提供的唯一额外信息是Windows 7 64位在VM中运行,尽管我在尝试调试时远程控制台。我在没有控制台连接的情况下在VM上调试时遇到了问题。

    如果有人可以提供任何进一步的建议,我会非常感激。

    如果有人能够解决这个问题并在Windows 7操作系统上成功调试IIS Web应用程序,描述必要的设置,我将提供300点的当前赏金!

9 个答案:

答案 0 :(得分:5)

我最近在Windows 7 64位计算机上遇到了同样的问题。对我有用的解决方案是检查Windows事件日志(系统)以查找特定的DCOM错误。这是我的错误:

  

计算机默认权限设置不授予具有CLSID的COM Server应用程序的本地激活权限   {} 17C2D338-9569-4022-8AF2-52A3A124F22D    和APPID   {} 17C2D338-9569-4022-8AF2-52A3A124F22D    从地址LocalHost(使用LRPC)到用户NT AUTHORITY \ IUSR SID(S-1-5-17)。可以使用组件服务管理工具修改此安全权限。

关键是我给IUSR内置帐户启动和激活权限。在确定为该用户授予单个DCOM组件权限并失败之后,我决定将用户添加到该计算机的默认DCOM权限。您可以按如下方式执行此操作:

运行dcomcnfg。右键单击Console Root / Component Services / Computers / My Computer节点。选择属性。选择“COM安全”选项卡。单击“访问权限”组下的“编辑默认值”。点击“添加”。输入事件日志中指示的用户(我的是IUSR)。单击确定。重复“启动和激活权限”组。在所有对话框中选择“确定”。

我没有重启我的机器以使这些设置生效。我使用相同的方法来调试我在XP上使用的VB6 dll,即在VB6下运行dll(无人值守执行),设置断点,导航到访问dll的页面,并等待断点被命中。希望这会有所帮助。

答案 1 :(得分:4)

不知道这是否会对你有所帮助..我正在研究我自己使用的同一个问题。

在观察者中我看到: 机器默认权限设置不授予带有

的COM Server应用程序的本地激活权限
CLSID 
{08855658-7A0B-4EF9-99B2-0AF875B3E62A}

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

从地址LocalHost(使用LRPC)到用户NT AUTHORITY \ IUSR SID(S-1-5-17)。可以使用组件服务管理工具修改此安全权限。

..所以我尝试将“本地激活”授予“所有人” - 只是为了看看我是否可以让它消失。 - 我不能。

然后我在组件服务/我的计算机(属性)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或类似的东西,看看会发生什么。

答案 2 :(得分:3)

我认为无法在比Windows XP更新的任何Windows版本的IDE中调试VB6 IIS Application(可能情况与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
  6. 之后,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

    所有这些都发生在 WebClass激活之前的Windows XP 上。进程无法在Windows 7上进入此阶段。

    很明显,VB6 IDE尝试在IIS中执行某些管理任务,以便能够调试WebClass。在Process MonitorAPI Monitor的帮助下,可以深入研究一下。很明显,VB6.exe依赖于IIS Admin Service的COM接口。坏消息是,与以前的版本不同,IIS 7+不使用Metabase,IIS 7+中没有IIS Admin Service。可以安装IIS Metabase and IIS6 compatibility组件,理论上应该启用使用Metabase继续使用IIS 7 +的应用程序:

    enter image description here

    不幸的是,安装它并不能解决问题。

    有人建议您的问题可能是由于COM组件的启动和激活权限不足造成的。我担心所有这些建议都是徒劳的。这种错误总是伴随着系统事件日志中的相关错误事件。在这种情况下没有这样的事件。

答案 3 :(得分:2)

您是否考虑过编写日志文件?它非常直接,你可以从代码最有可能导致错误的地方开始。我建议创建一个函数,它接受一些参数,如子/函数名,一个Err对象和一个可选的额外字符串,这样你就可以包含其他信息,例如代码所在的步骤。在错误处理程序中调用你的函数传递你的参数。

答案 4 :(得分:2)

伙计,我能同情吗?我花了差不多3个工作日,仍然没有我非常满意的解决方案,但它确实有效,所以我“放弃”找到正确的解决方案,然后继续这样做,因为我不能浪费更多的资源时间。

在IIS管理器下,单击虚拟目录 - >验证
- 禁用匿名身份验证
- 启用基本身份验证

浏览到应用,输入具有足够权限的域或工作站凭据,以根据应用程序所在的文件系统安全性设置内容使应用程序正常工作。

这实际上意味着每次我第一次开始调试时都必须对virtdir进行身份验证,但是为了最终再次调试功能,这是一个很小的代价。

答案 5 :(得分:1)

您是否可以将发送到应用程序的VB6部分的信息复制并从控制台进行测试?

我的意思是,这很糟糕,但我们正在讨论调试混合IIS VB6应用程序。

答案 6 :(得分:1)

我认为你可以非常肯定这不是微软不希望它发挥作用的问题,而只是它无法运作。你知道这个文件吗?http://msdn.microsoft.com/en-us/vstudio/ms788708.aspx

它声明:

  

从未在本机64位中提供Visual Basic 6.0 IDE   版本,64位Windows上也不支持32位IDE。 VB6   在64位Windows或除以外的任何本机体系结构上进行开发   不支持32位,也不支持。

我已经尝试过并且失败了所以选择在VM中运行32位操作系统然后它可以完美运行。我认为这是由于调试器如何挂钩到内核以便能够运行调试器。

答案 7 :(得分:1)

我今天在2012年9月14日遇到了这个问题,并设法以最简单的方式解决它,我有调试dll我需要Visual Basic 6.0与XP我没有问题但是我把它改成了Windows 7而且有问题使用iis7,我在许多论坛和博客中阅读,但我没有,即使我做了这个博客,最后我也解决了以下问题:组件服务 - > Computers->右键单击属性 - >然后单击安全选项卡COM->部分启动和激活权限 - >编辑默认值 - >然后添加本地服务帐户并授予所有权限。我澄清一下,对我来说,它可以在本地调试visual basic 6.0中的dll,但是如果它是好的或唯一的解决方案,我认为我做得很好这应该完成他们在其他论坛上的说法,现在很好微软http://support.microsoft.com/kb/899965/es页面说的是同样的事情,但是说我按照我的方式添加了NETWORK SERVICE帐户,并且我为我命令事件查看器的错误工作了:

“在您的计算机上默认设置权限设置不授予使用CLSID {95D14525-F934-4D4F-9B33-2CE753FAF3B0}和APPID {95D14525-F934-4D4F-9B33-2CE753FAF3B0}的COM服务器应用程序的本地激活权限用户NT AUTHORITY \ LOCAL SERVICE,地址为LocalHost(带LRPC),SID(S-1-5-19)。 可以使用组件服务管理工具“

修改此安全权限

您看到NT \ AUTHORITY \ NETWORK SERVICE LOCAL SERVICE帐号骨头。

嗯就是这样。

答案 8 :(得分:0)

听起来您希望在创建应用程序实例时在调试器中触发VB6 IDE,并且失败了。您是否尝试在调试模式下启动VB6 IDE以托管COM组件,在源代码中设置断点,然后查看是否访问使用该组件的页面将导致调试器中的断点被命中?也就是说,将VB6 IDE激活出循环 - 让它运行只会导致应用程序的CLSID指向作为COM主机的IDE的运行时实例。

自从我开始使用VB6以来已经很久了,所以有些细节可能很粗略,但我确实记得调试COM服务器需要一些体操,其中一个解决方案是运行一个单独的VB实例作为COM进程外服务器主机。