无法引用之前工作的Dll

时间:2010-01-15 21:09:27

标签: c# com dll adsi iadstsuserex

我正在尝试以编程方式更改终端服务设置。 I learned that you must use tsuserex.dll。作为c#我通过tlbimp运行tsuserex并创建TSUSEREXLib.dll然后用regasm注册它。我得到了它的工作,并用它作为概念教授编写了一个框架程序。但是今天在我运行程序后做了一些更改后,我收到了错误

无法将“System .__ ComObject”类型的COM对象转换为接口类型“TSUSEREXLib.IADsTSUserEx”。此操作失败,因为由于以下错误,IID为“{C4930E79-2989-4462-8A60-2FCF2F2955EF”的接口的COM组件上的QueryInterface调用失败:不支持此类接口(HRESULT异常:0x80004002(E_NOINTERFACE))

它在行

上引发了异常
IADsTSUserEx iad = (IADsTSUserEx)((DirectoryEntry)user.GetUnderlyingObject()).NativeObject;

这条确切的线在测试项目中运行良好。我知道用户是一个有效的UserPrincipal,谷歌我发现这通常只是需要重新注册的dll,但即使在卸载和重新加载后它仍然无法正常工作。我错过了什么导致我的dll停止工作。

4 个答案:

答案 0 :(得分:3)

我知道这是一个旧线程,但由于我最近遇到了让终端服务组件在Windows 7上运行所需的所有步骤,我想分享我发现的内容。我认为以下步骤比从服务器复制tsuserex.dll并尝试注册它更可靠。

根据我的理解,在任何操作系统上,您需要安装远程服务器管理工​​具(RSAT)才能以编程方式修改用户帐户的终端服务属性。在某些版本的Windows上,这需要下载。但是在Windows 7上,已经安装了RSAT。

但您可能需要使用“控制面板”(appwiz.cpl)中的配置选项启用它。在“打开或关闭Windows功能”下,转到“远程服务器管理工​​具”,然后确保选中“远程桌面服务工具”。

在我这样做(和重新启动)我能够经由PowerShell来使用这些组件从tsuserex.dll(例如,SET-QADUser -Identity为testUser -TsHomeDirectory“C:\ tshome”),并通过加入在视觉参考Studio 2010(到“tsexusrm 1.0类型库”)。

答案 1 :(得分:0)

您几乎肯定需要在目标计算机上重新注册TLB。可能发生的是您在应用程序中没有硬编码的程序集,接口或类型GUID,因此在每次重建时都会更改它。因此,在重建和部署之后,您的类型将不再与之前注册的TLB匹配。

答案 2 :(得分:0)

正确的答案是,我是一个白痴,因为我没有重视我的构建环境确实发生了变化。当我开始这个项目时,我搬到了一个新的工作站,这个工作站是windows 7 corprate而不是server 2003。 Win7 corp在其系统中没有tsuserex.dll。

答案 3 :(得分:0)

Visual Studio构建设置“平台目标”disable => “首选32位”解决问题。