Не может ссылаться на Dll, который работал ранее - PullRequest
1 голос
/ 16 января 2010

Я пытаюсь программно изменить настройки служб терминалов. Я узнал, что вы должны использовать tsuserex.dll . Будучи c #, я запустил tsuserex через tlbimp и создал TSUSEREXLib.dll, а затем зарегистрировал его с помощью regasm. Я получил его на работу и написал рамочную программу с концепцией. Однако сегодня, после внесения некоторых изменений при запуске программы, я получаю сообщение об ошибке

Невозможно привести COM-объект типа 'System .__ ComObject' к типу интерфейса 'TSUSEREXLib.IADsTSUserEx'. Эта операция завершилась неудачно, поскольку вызов QueryInterface для компонента COM для интерфейса с IID '{C4930E79-2989-4462-8A60-2FCF2F2955EF}' завершился ошибкой из-за следующей ошибки: такой интерфейс не поддерживается (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE)) .

это исключение на линии

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

Эта точная линия отлично работала в тестовом проекте. Я знаю, что пользователь является действительным UserPrincipal, Googleing я обнаружил, что обычно это просто нужно перерегистрировать DLL, но даже после выгрузки и перезагрузки он все равно не будет работать. Чего мне не хватает, чтобы заставить мою dll перестать работать.

Ответы [ 4 ]

3 голосов
/ 08 февраля 2012

Я знаю, что это старая ветка, но так как недавно у меня возникли проблемы с поиском всех необходимых шагов, чтобы заставить компоненты служб терминалов работать на Windows 7, я хотел поделиться тем, что нашел. Я думаю, что приведенные ниже шаги более надежны, чем копирование tsuserex.dll с сервера и попытка его зарегистрировать.

Насколько я понимаю, в любой операционной системе вам необходимо установить средства удаленного администрирования сервера (RSAT) для программного изменения атрибутов служб терминалов учетной записи пользователя. В некоторых версиях Windows это требует загрузки. Но в Windows 7 RSAT уже установлен.

Но вам может потребоваться включить его с помощью параметров конфигурации в панели управления (appwiz.cpl). В разделе «Включение или отключение функций Windows» перейдите к «Инструменты удаленного администрирования сервера» и убедитесь, что установлен флажок «Инструменты служб удаленного рабочего стола».

После того, как я это сделал (и перезагрузил), я смог использовать компоненты из tsuserex.dll через PowerShell (например, Set-QADUser -Identity testUser -TsHomeDirectory "c: \ tshome") и добавив ссылку в Visual Studio 2010 (для "библиотеки типов tsexusrm 1.0").

0 голосов
/ 12 сентября 2013

Настройка сборки Visual Studio «Цель платформы» disable => «Предпочитать 32-разрядный» решить проблему.

0 голосов
/ 17 января 2010

Правильный ответ: я идиот, что не понимаю, что моя среда сборки изменилась. Когда я начал работу над проектом, я перешел на новую рабочую станцию, которая была Windows 7 корпоративной вместо сервера 2003 года. Корпорация Win7 не имеет tsuserex.dll в своей системе.

0 голосов
/ 16 января 2010

Вам почти наверняка нужно перерегистрировать свой TLB на целевой машине. Вероятно, произошло то, что у вас нет жестко запрограммированной сборки, интерфейса или типа GUID в приложении, и, следовательно, он изменяется при каждой перестройке. Поэтому после восстановления и развертывания ваш тип больше не совпадает с ранее зарегистрированным TLB.

...