2010-01-15 42 views
1

我試圖通過編程方式更改終端服務設置。 I learned that you must use tsuserex.dll。作爲c#我通過tlbimp運行tsuserex並創建了TSUSEREXLib.dll然後用regasm註冊它。我得到它的工作,並寫了一個框架程序,它作爲一個概念教授。但是,今天當我在運行我的程序時進行了一些更改後,出現錯誤無法引用先前工作的Dll

無法將類型爲'System .__ ComObject'的COM對象轉換爲接口類型'TSUSEREXLib.IADsTSUserEx'。此操作失敗,因爲IIC'{C4930E79-2989-4462-8A60-2FCF2F2955EF}'接口的COM組件上的QueryInterface調用因以下錯誤而失敗:沒有此類接口支持(異常來自HRESULT:0x80004002(E_NOINTERFACE)) 。

它thows上線

IADsTSUserEx iad = (IADsTSUserEx)((DirectoryEntry)user.GetUnderlyingObject()).NativeObject; 

這個確切的行測試項目工作的罰款除外。我知道用戶是一個有效的UserPrincipal,谷歌我發現這通常只是需要重新註冊的DLL,但即使卸載和重新加載它仍然無法正常工作。我錯過了什麼導致我的dll停止工作。

回答

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類型庫」)。

+0

這救了我。謝謝! – ErnieL 2012-10-23 20:58:19

0

你幾乎可以肯定需要在目標機器上重新註冊你的TLB。可能發生的情況是,您的程序集中的接口或類型GUID沒有在應用程序中進行硬編碼,因此每次重建都會對其進行更改。因此,重建和部署您的類型後,不再與以前註冊的TLB相匹配。

+0

我在運行它本地並獲取此錯誤消息。而且我已經重新註冊了TLB並仍然收到了該消息。 我在哪裏可以在TLB創建過程中硬編碼GUID? – 2010-01-15 21:16:01

+0

@Scott,嘗試在註冊表中查找對您的DLL名稱的引用並手動刪除它們,然後重新註冊。 – JaredPar 2010-01-15 21:18:13

+0

@JaredPar,我刪除了regrestry中所有DLL的名稱和GUID參考條目,但我仍然得到相同的錯誤。 – 2010-01-15 22:11:24

0

正確的答案是,我不reliseing我的構建環境的確改變了一個白癡。當我開始執行這個項目時,我轉移到了一個新的工作環境,那就是windows 7 corprate而不是server 2003。 Win7 corp在其系統中沒有tsuserex.dll。

+1

請注意32位和64位版本的DLL。我將win 2008服務器的錯誤版本複製到了我的64位Win7工作站,並且獲得了ComExceptions的「很多樂趣」,儘管每個編譯都很好。 – hoetz 2011-05-06 14:29:49

0

Visual Studio中生成設置「平臺目標」禁用=>「不想32位」解決問題。