【问题标题】:PowerShell WindowStyle -Hidden working on Windows 10 but not Windows 7PowerShell WindowStyle - 隐藏在 Windows 10 但不适用于 Windows 7
【发布时间】:2017-02-16 05:43:59
【问题描述】:

我正在制作一个使用 Start-Process cmdlet 的应用程序。

Start-Process with -WindowStyle Hidden(或 Minimized 等)不会影响这个特定的应用程序链接,Windows 7 上的 Docker QuickStart Terminal。我使用的是 Docker Toolbox 而不是 Docker for Windows。

Start-Process -WindowStyle Hidden -FilePath "$env:appdata\Microsoft\Windows\Start Menu\Programs\Docker\Docker Quickstart Terminal.lnk"

它可以毫无问题地启动应用程序,但它不会像在 Windows 10 上那样隐藏应用程序。我很困惑,因为正常的快捷方式链接(Chrome 和 Internet Explorer)和其他应用程序在两个平台上都会正确启动和隐藏/最小化。唯一的问题是这个特定的快捷链接。

我不确定这是否与 PowerShell 版本(Windows 7 上的 2.0 和 Windows 10 上的 5.0)相关联。

有没有人遇到过类似的问题?任何帮助将不胜感激。

【问题讨论】:

    标签: windows powershell powershell-2.0 powershell-5.0


    【解决方案1】:

    Docker 快捷方式启动 bash.exe,该 bash.exe 启动另一个 bash.exe,另一个 bash.exe 启动另一个 bash.exe。
    Bash 是内置在 Windows 10 中的,但不是在以前版本的 Windows 中,所以我想这就是原因。

    让我们解析快捷方式文件并手动启动它的目标:

    function runProgramShortcutHidden($relativePath) {
        $programsMenu = [Environment]::GetFolderPath([Environment+SpecialFolder]::Programs)
        $fullPath = Join-Path $programsMenu $relativePath
    
        $linkDir = (New-Object -com Shell.Application).NameSpace((Split-Path $fullPath))
        $link = $linkDir.ParseName((Split-Path -leaf $fullPath)).GetLink
    
        $psi = New-Object Diagnostics.ProcessStartInfo
        $psi.FileName = $link.Path
        $psi.Arguments = $link.Arguments
        $psi.WorkingDirectory = $link.WorkingDirectory
        $psi.WindowStyle = [Diagnostics.ProcessWindowStyle]::Hidden
    
        [Diagnostics.Process]::Start($psi) >$null
    }
    

    用法:

    runProgramShortcutHidden 'Docker\Docker Quickstart Terminal.lnk'
    

    注意事项:

    • 由于代码使用ShellLink接口,所以支持快捷方式目标路径中的Unicode;
    • System.Diagnostics.Process 类用于按原样传递参数字符串。

    【讨论】:

    • 嗨,我错过了我使用 Docker Toolbox 而不是 Docker for Windows 的事实。我认为 Docker Toolbox 使用了非内置的 Git Bash。在我回来接受您的答案之前,我将更多地研究 PowerShell(我知道的很少)以了解您刚刚写的内容。谢谢。
    • 嗨,它在 Windows 10 上运行良好,但在 Windows 7 上运行良好,不包含“GetLink”,imgur.com/a/xqOmn
    • 您好,非常感谢您的回复,我现在无法验证答案,因为测试此问题的机器现在不可用。明天我会验证的。还有一个问题,如果我想 run.sh 作为 ArgumentList 的参数,我可以添加这一行 $psi.ArgumentList = run.sh 吗?
    • 好的,我意识到 ^ 不起作用。我希望能够指定 -ArgumentList run.sh,因为我需要它来运行 shell 脚本,然后自行退出。
    • 作为带引号的字符串:$psi.Arguments = 'param1 param2 "param in quotes"' 但请注意,它会替换整个参数字符串,因此您可能希望将其添加到 $link 中的现有字符串中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多