2017-02-16 2 views
2

Я создаю приложение, которое использует командлет Start-Process.PowerShell WindowStyle -Скрытая работа в Windows 10, но не Windows 7

Запуск процесса с -WindowStyle Hidden (или Minimized и другие) не влияет на эту конкретную ссылку на приложение, Docker QuickStart Terminal в Windows 7. Я использую Docker Toolbox вместо Docker для 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 класс используется для передачи строки аргументов как есть.
+0

Привет, я пропустил тот факт, что я использую Docker Toolbox вместо Docker для Windows. Я думаю, что Docker Toolbox использует не встроенный Git Bash. Я больше изучу PowerShell (я знаю очень мало), чтобы понять, что вы только что написали, прежде чем я вернусь, чтобы принять ваш ответ. Благодарю. –

+0

Привет, поэтому он отлично работает на Windows 10, но не на Windows 7, не содержит «GetLink», http://imgur.com/a/xqOmn –

+0

Привет, большое спасибо за отзыв, я не могу проверить ответ теперь, поскольку машина для проверки этого сейчас недоступна. Я проверю его завтра. Еще один вопрос: могу ли я добавить эту строку '$ psi.ArgumentList = run.sh', если я хочу, чтобы run.sh был аргументом для ArgumentList? –

Смежные вопросы