我正在尝试以编程方式更改终端服务设置。 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停止工作。
答案 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位”解决问题。