Я не уверен, стоит ли размещать это здесь или в StackOverflow.
Мне нужен BAT, который открывает файл подключения RDP, а затем, когда соединение закрывается, выходит из системы.
start /WAIT "ConnectionFile.rdp"
logoff
Но выход из системы происходит мгновенно, не дожидаясь выхода. Я также пробую использовать C # и Process.WaitforExit ().
Что вы должны сделать? Я думаю, что это проблема с mstsc.exe, когда параметром является файл RDP.
Обновить: Я тестировал, и это хорошо работает в Windows 7, но в Windows 8 и на Windows 7 Thin PC это не работает.
Обновить Используя powershell, я немного продвинулся. Моя летучая мышь выглядит так, запустите процесс в Powershell, он работает.
powershell -version 2.0 -Sta -ExecutionPolicy UnRestricted Start-Process -Wait -FilePath mstsc -ArgumentList ConnectionFile.rdp; logoff
Но если RDP является допустимым файлом, когда Windows запрашивает учетные данные, он терпит неудачу и продолжает следующий процесс. В демонстрационных целях я изменил выход из системы на calc.
Попробуй это:
START /WAIT !_MSTSC! !_FILE! !_CONSOLE!
где
Это явно зависит от WAIT от MSTSC, а не только от «успешного открытия» вашего RDP-файла. Таким образом, он должен (!) Работать немного лучше.
И ... вот интересная оговорка из справочного текста START:
If Command Extensions are enabled, external command invocation
through the command line or the START command changes as follows:
When executing an application that is a 32-bit GUI application, CMD.EXE
does not wait for the application to terminate before returning to
the command prompt. This new behavior does NOT occur if executing
within a command script.
Итак ... здесь может потребоваться обернуть команду и параметры MSTSC в файл CONNECT-REMOTE.CMD и дождаться завершения THAT.
Для тех, кто нашел эту статью и борется с этой проблемой, вставьте следующее правило между командой mstsc.exe и выходом из системы:
powershell wait-process -name mstsc
При сочетании с этой статьей: https://www.experts-exchange.com/articles/10032/MSTSC-as-a-Shell.html mstsc.cmd содержит:
C:\Windows\System32\mstsc.exe RDPLocation
powershell wait-process -name mstsc
logoff