2017-02-16 97 views
2

我正在製作一個使用Start-Process cmdlet的應用程序。PowerShell WindowStyle - 隱藏在Windows 10上但不能在Windows上工作7

使用-WindowStyle啓動進程隱藏(或最小化等)對此特定應用程序鏈接,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的版本,2.0在Windows 7和5.0在Windows 10

任何人都經歷了類似的問題相關的問題?任何幫助將不勝感激。

回答

1

Docker快捷方式啓動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' 

注:

  • 的Unicode在快捷方式的目標路徑,因爲該代碼使用支持ShellLink接口;
  • System.Diagnostics.Process class用於傳遞參數字符串。
+0

嗨,我錯過了我使用Docker Toolbox而不是Docker for Windows的事實。我認爲Docker Toolbox使用非內置的Git Bash。我將更多地學習PowerShell(我知道的很少),以便在我回來接受您的答案之前瞭解您剛寫的內容。謝謝。 –

+0

嗨,所以它適用於Windows 10,但不是Windows 7,不包含'GetLink',http://imgur.com/a/xqOmn –

+0

嗨,非常感謝你的迴應,我無法驗證現在回答測試此機器現在不可用。我明天會驗證它。還有一個問題,如果我想將run.sh作爲ArgumentList的參數,我可以添加這行'$ psi.ArgumentList = run.sh'? –

相關問題