如何从PS模块路径加载dll

时间:2020-01-17 09:58:37

标签: powershell dll dllimport

我有一个PS模块-一切正常。对于此模块中的新脚本,我需要从Microsoft WindowsAPICodePack加载dll

我已将dll添加到模块内的“程序集”文件夹中,该文件夹安装在默认位置(C:\ Program Files \ WindowsPowershell \ Modules \ ModuleName)。

当dll位于临时文件夹中时,使用dll的脚本在测试中可以正常工作。 'c:\ temp',但是,当我从模块运行脚本时,使用模块中dll副本的路径(C:\ Program Files \ WindowsPowershell \ Modules \ ModuleName \ Assemblies \ mydllname.dll),无法加载具有“找不到文件”的dll。

我是计算机的本地管理员,因此我可以访问该路径,如果在运行Powershell之前先将其提升,它也会失败。

我需要从此位置加载dll,而无需修改该文件夹的权限,因为该模块可以通过我们的内部存储库分发给许多用户。有什么想法可以实现吗?

有没有一种方法可以在模块加载时将dll加载到用户环境中?但这可能也不起作用,因为这似乎是从模块路径执行/加载dll的权限问题。

我想我可以对.psm1中的dll运行Set-Acl命令,但这似乎有些笨拙,不知道安装模块进程是否具有必需的权限?

示例代码:

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"

那么它将成功

尝试

将dll添加到清单中模块的Required Assemblies

将此添加到脚本的开头

Using moduleName
Using namespace Microsoft.WindowsAPICodePack

相同错误

0 个答案:

没有答案
相关问题