1

我正在尝试以编程方式更改终端服务设置。我了解到您必须使用 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;

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

4

4 回答 4

3

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

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

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

完成此操作(并重新启动)后,我能够通过 PowerShell 使用 tsuserex.dll 中的组件(例如,Set-QADUser -Identity testUser -TsHomeDirectory "c:\tshome"),并在 Visual Studio 2010 中添加引用(到“tsexusrm 1.0 类型库”)。

于 2012-02-08T16:49:54.280 回答
0

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

于 2010-01-17T01:42:03.773 回答
0

Visual Studio Build Setting „Platform target“ disable=> “Prefer 32-bit” 解决了这个问题。

于 2013-09-12T11:00:34.927 回答
0

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

于 2010-01-15T21:13:17.750 回答