9

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

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

如果我不调试并简单地访问已编译的 webclass 页面加载就好了。因此,我认为应用程序的注册/配置没有任何问题,而是与 Windows 操作系统安全性阻止 VB6 IDE 连接到 IIS 并允许它进行调试有关。

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

  1. 禁用用户帐户控制 (UAC) 并重新启动。
  2. 修改了机器调试管理器 (MDM) 的 DCOM 组件安全性,并分配了“所有人”启动和激活权限。
  3. 为“70F214BA-94E2-4bdf-8F30-32CB4A905E4D”手动添加 DCOM 条目,这是 VB6 IDE,并分配了“所有人”启动和激活权限。
  4. 禁用 Windows 防火墙
  5. 以管理员身份运行选项在 Windows XP SP3 的兼容模式下运行应用程序 (VB6.exe)。
  6. 创建了一个新的 IIS 应用程序池,其身份设置为管理员帐户。将应用程序管道模式设置为经典并启用 32 位旧版应用程序支持。

这耗尽了我尝试的丰富经验。如果我创建一个 VB6 Windows 应用程序或 ActiveX 控件,我可以轻松启动和调试。

尽管全新安装的 W2K3 解决了该问题,但我在 Windows Server 2003 上遇到了非常类似的问题。

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

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

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

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

如果有人可以提供任何进一步的尝试建议,我将不胜感激。

如果有人能弄清楚这一点并在 Windows 7 操作系统上成功调试描述必要设置的 IIS Web 应用程序,我将提供当前 300 分的奖励!

4

9 回答 9

6

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

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

对我来说,关键是授予 IUSR 内置帐户启动和激活权限。在尝试将此用户权限授予各个 DCOM 组件但失败后,我决定将用户添加到机器的默认 DCOM 权限中。您可以按如下方式执行此操作:

运行 dcomcnfg。右键单击控制台根目录/组件服务/计算机/我的电脑节点。选择属性。选择“COM 安全”选项卡。单击“访问权限”组下的“编辑默认值”。点击“添加”。输入您的事件日志中指定的用户(我的是 IUSR)。单击确定。对“启动和激活权限”组重复此操作。在所有对话框上选择确定。

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

于 2013-01-04T21:52:04.537 回答
4

不知道这是否对您有进一步的帮助。我正在研究我自己使用的相同问题。

在甚至查看器中,我看到:机器默认权限设置不授予 COM 服务器应用程序的本地激活权限

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 或类似的东西,看看会发生什么。

于 2012-04-18T09:36:28.987 回答
3

我相信不可能IIS Application在比 Windows XP 更新的任何 Windows 版本上的 IDE 中调试 VB6(可能情况与 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. 选择调试选项卡上的任何选项,然后按确定: 在此处输入图像描述

紧接着 VB6 IDE 中出现错误消息:

在此处输入图像描述

让我们看看在 Windows XP 上执行相同的场景时会发生什么。当一个人开始调试 VB6 时IIS Application

  • VB6 IDE 启动 IIS 服务,如果它没有运行:

在此处输入图像描述

  • VB6 IDE 提示选择 IIS 虚拟目录:

在此处输入图像描述

这一切都发生在 Windows XP激活之前。 WebClass进程在 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+ 的组件:

在此处输入图像描述

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

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

于 2013-04-14T15:40:11.037 回答
2

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

于 2012-01-05T00:39:24.717 回答
2

兄弟,我能同情一下吗?我花了将近 3 个工作日来解决这个问题,但仍然没有一个我非常满意的解决方案,但它确实有效,所以我“放弃”了寻找正确的解决方案,并选择了这个,因为我不能再浪费资源时间了。

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

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

这实际上意味着我每次第一次开始调试时都必须向 virtdir 验证自己的身份,但最终再次调试功能需要付出很小的代价。

于 2012-04-24T02:02:28.440 回答
1

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

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

于 2012-01-04T15:04:53.127 回答
1

我想你可以很确定这不是微软不希望它工作的问题,而只是它不能工作。你知道这个文件吗?: http: //msdn.microsoft.com/en-us/vstudio/ms788708.aspx

它指出:

Visual Basic 6.0 IDE 从未在本机 64 位版本中提供,32 位 IDE 也不支持 64 位 Windows。不支持在 64 位 Windows 或任何非 32 位本机架构上进行 VB6 开发。

我也尝试过但失败了,所以选择在 VM 中运行 32 位操作系统,然后它可以完美运行。我认为这是由于调试器如何连接到内核才能运行调试器。

于 2012-06-05T12:01:49.697 回答
1

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

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

你看说NT\AUTHORITY\NETWORK SERVICE LOCAL SERVICE 帐号骨。

仅此而已。

于 2012-09-14T19:09:53.050 回答
0

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

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

于 2012-04-24T16:09:08.380 回答