旧服务器是 Windows 2000,原始安装人员对几乎所有内容的回答都是 C:\ --> 所有人 --> 完全控制。但是,确实有一个安装文档,似乎在一定程度上是可行的。
- 创建本地管理员 com 用户
- 创建引用该用户和站点提供的一些 dll 的 COM+ 应用程序
- 安装了 .net 版本 1.0、1.1、2.0(我尝试在每个版本下运行,错误没有变化)
服务器对象错误 'ASP 0178 : 80070005' Server.CreateObject 访问错误 /Include/fnLookups.asp,第 10 行 检查权限时对 Server.CreateObject 的调用失败。拒绝访问此对象。
第 10 行看起来是:
设置 objClient = Server.CreateObject("fooUser.CfooUser")
我查看了系统日志,发现:
应用程序特定的权限设置未向用户 mydomain\myusername SID (mySID) 授予 CLSID 为 {280D5CF7-80A4-40AC-844C-FE3653F02FF1} 的 COM 服务器应用程序的本地激活权限。可以使用组件服务管理工具修改此安全权限。
这算是某种进步,它很好地获取了 COM 应用程序和我的 ID。我将自己添加到 dcomdnfg 中“我的电脑”对象的“访问权限”和“启动和激活权限”中 - 但我的叫喊似乎指向了错误的树。
我跑过去mskb198432和我能做到的一样好,尽管它似乎是针对早期版本,但也没有乐趣。
欢迎任何想法。
编辑-已尝试的建议列表
- 排除了 x64 差异,在 x32 中运行出现同样的问题。
- 排除文件权限
- “授予每个人本地启动和激活权限,以确保这是 COM 权限问题” - 完成了,没有乐趣
- IIS5 隔离模式已启用
编辑 - 我可以在旧的 Windows 2k 服务器上查看任何可能提供一些见解的内容吗?
答案1
您是否尝试将相关用户添加到本地 DCOM 用户组?
http://technet.microsoft.com/en-us/library/cc738214(WS.10).aspx
答案2
这个错误就是线索:
应用程序特定的权限设置未向用户 mydomain\myusername SID (mySID) 授予 CLSID 为 {280D5CF7-80A4-40AC-844C-FE3653F02FF1} 的 COM 服务器应用程序的本地激活权限。
COM 对象不应以您的身份运行,而应以 IUSR_MachineName 或网络服务用户(运行 IIS 的用户)的身份运行。您不希望每个访问站点的用户都以他们的身份运行 DLL - 这不是个好主意。
确保您的虚拟目录指向的物理目录的权限使运行 IIS(IUSR_machinename)的用户具有正确的权限,并且 COM 中注册的 DLL 具有 IIS 用户的正确权限。
在 IIS 中,权限很难调试,因为安全事件并不总是记录到安全事件日志中。身份验证和访问控制诊断 1.0 工具是调查权限问题的绝佳工具。
http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1285
答案3
为了完整起见,以 ASP.Net 1.0 和 ASP.Net 2.0 运行网站之间存在差异。尽管该框架向后兼容,但我建议尝试以 Framework 1.1 网站的形式运行该网站。这可能需要加载 Framework 1.1。
但是代码示例表明这是典型的 ASP。因此问题与 COM 对象的安全性有关。确保已注册 DLL,并且您授予权限的对象也有可能依赖于您未授予访问权限的另一个 DLL。
此外,在更改安全性或进行任何更改时,请重新启动 IIS 以及组件服务器中的组件本身。由于内存缓存和其他扩展原因,它通常需要启动。
答案4
就像一些用户抱怨的那样,你不清楚这是经典的 asp 还是 asp.net。话虽如此,根据你的主题行和错误消息,以下是我的看法
这是一个 .NET 应用程序吗
- 确保 ASP.NET 已正确安装。
- 确保该站点在 IIS 中配置为 ASP.NET 2.0。
您的应用程序似乎正在访问 COM 对象,因此请确保 IIS 工作进程有权访问该组件。您可以尝试运行 FILEMON 和 REGMON 来准确找出哪个组件是罪魁祸首。如果该组件位于 Program Files/Common 文件夹中,请确保在该文件夹上设置了正确的权限。
在 ASP.NET 甚至 Classis ASP 中访问 COM 组件通常需要进行 B.... 故障排除。