只有在从运行对话框执行以下powershell命令时,我才会遇到DLL导入错误。来自open PowerShell窗口的完全相同的命令执行没有问题。
生成RUN对话框命令时出错:
Powershell $k=Add-Type -MemberDefinition '[DllImport("user32.dll")]public static extern bool ShowWindow(IntPtr h, int n);' -Name w -PassThru
在已打开的PowerShell窗口中运行相同的代码时,不会返回任何错误:
$k=Add-Type -MemberDefinition '[DllImport("user32.dll")]public static extern bool ShowWindow(IntPtr h, int n);' -Name w
-PassThru;
我发现这令人困惑,因为我认为这两种方法都应该产生相同的结果。有没有合理的理由说明为什么会这样?如何解决此错误?
代码的目的是最小化powershell窗口。我知道还有其他方法可以实现这一目标。
答案 0 :(得分:1)
欢迎来到不同语言的嵌套字符串文字的精彩世界。
在PowerShell要执行的整个命令行周围加上双引号,并使用反斜杠转义嵌套双引号:
powershell "$k=Add-Type -MemberDefinition '[DllImport(\"user32.dll\")]pub...;"
# ^ ^ ^ ^
附录:请注意,从PowerShell控制台调用时,上述命令行将不。在这种情况下,您需要在命令字符串中为$
和"
字符添加其他(PowerShell)转义符:
powershell "`$k=Add-Type -MemberDefinition '[DllImport(\`"user32.dll\`")]pub...;"
# ^ ^ ^