1

仅当从运行对话框执行以下 powershell 命令时,我似乎才遇到 DLL 导入错误。来自打开的 powershell 窗口的完全相同的命令可以毫无问题地执行。

产生 RUN 对话框命令时出错:

Powershell $k=Add-Type -MemberDefinition '[DllImport("user32.dll")]public static extern bool ShowWindow(IntPtr h, int n);' -Name w -PassThru

打印以下错误: PowerShell错误

在已打开的 powershell 窗口中运行相同的代码时不会返回错误:

$k=Add-Type -MemberDefinition '[DllImport("user32.dll")]public static extern bool ShowWindow(IntPtr h, int n);' -Name w
-PassThru;

我觉得这非常令人困惑,因为我认为这两种方法都应该产生相同的结果。为什么会发生这种情况有任何合乎逻辑的理由吗?如何解决此错误?

代码的目的是最小化 powershell 窗口。我知道还有其他方法可以实现这一点。

4

1 回答 1

1

欢迎来到跨不同语言嵌套字符串文字的美妙世界。

在要由 PowerShell 执行的整个命令行周围加上双引号,并用反斜杠转义嵌套的双引号:

powershell "$k=Add-Type -MemberDefinition '[DllImport(\"user32.dll\")]pub...;"
#          ^                                          ^           ^          ^

附录:请注意,当从 PowerShell 控制台调用时,上述命令行将不起作用。在这种情况下,您需要额外的(PowerShell)转义符$"命令字符串中的字符:

powershell "`$k=Add-Type -MemberDefinition '[DllImport(\`"user32.dll\`")]pub...;"
#           ^                                           ^            ^
于 2017-08-15T21:11:14.873 回答