Как загрузить DLL из пути модуля PS - PullRequest
2 голосов
/ 17 января 2020

У меня есть модуль PS - все работает нормально. Для нового скрипта, который является частью этого модуля, мне нужно загрузить DLL из Microsoft WindowsAPICodePack

Я добавил DLL в папку «Сборки» в модуле, который устанавливается в расположение по умолчанию ( C: \ Program Files \ WindowsPowershell \ Modules \ ModuleName).

Скрипт, который использует dll, отлично работает в тесте, когда dll находится во временной папке, например, 'c: \ temp', однако, когда я запускаю сценарий из модуля, используя путь к копии dll в модуле (C: \ Program Files \ WindowsPowershell \ Modules \ ModuleName \ Assemblies \ mydllname.dll), он не может загрузить файл DLL с "файлом not found ".

Я являюсь локальным администратором компьютера, поэтому у меня есть доступ к пути, и он также не работает, если я поднимаю Powershell перед его запуском.

Мне нужно загрузить dll из это местоположение без изменения прав доступа к папке, так как модуль предназначен для распространения среди многих пользователей через наш внутренний репозиторий. Любые идеи, как это может быть достигнуто?

Есть ли способ загрузить DLL в пользовательскую среду при загрузке модуля вместо этого? Это также может не сработать, хотя, как представляется, проблема с разрешениями при выполнении / загрузке DLL из пути модулей.

Полагаю, я мог бы запустить команду Set-Acl против библиотеки DLL в .psm1, но это кажется немного неуклюже и не знаю, будут ли у процесса установки модуля требуемые права?

Пример кода:

Try {
    Add-Type -AssemblyName System.Windows.Forms
    Add-Type -Path $DllPath
}
Catch {
    $_
    Pause
    Break
}

Если

$DllPath = "C:\Program Files\WindowsPowerShell\Modules\module\dllname.dll"

Тогда произойдет сбой

Если

$DllPath = "C:\temp\dllname.dll"

, то это будет успешно

Tried

Добавлен dll к Required Assemblies модуля в манифесте

Добавлено это для запуска скрипта

Using moduleName
Using namespace Microsoft.WindowsAPICodePack

Та же ошибка

...