С# запущенная командная строка не закрывается

Я только что снова начал использовать C# и столкнулся с ошибкой/проблемой при попытке запустить процесс с помощью командной строки.

Я пытаюсь запустить/открыть экранную клавиатуру по умолчанию из Windows с помощью командной строки. Однако после выполнения osk.exe окно командной строки все еще открыто. После закрытия окна командной строки вручную, нажав кнопку x, и попытки снова нажать кнопку, чтобы выполнить код, командная строка закроется после открытия osk.exe, как и должно быть.

Вот код, который я пытался запустить:

Process.Start(Path.Combine(Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.System)).FullName, "Sysnative", "cmd.exe", "/c osk.exe ; exit");

Я получил этот код из этого веб-сайт

Я даже пытался запустить другую строку, чтобы убить всю открытую командную строку с кодом ниже. Но после выполнения открывается другая командная строка, которая никогда не закрывается автоматически....

 System.Diagnostics.Process.Start("CMD.exe", "taskkill /IM cmd.exe");

введите здесь описание изображения

Я попытался вручную запустить в командной строке, чтобы увидеть, есть ли ошибки в моей командной строке Windows, но она работает нормально.

Я просто хочу открыть экранную клавиатуру при нажатии кнопки без сохранения открытой командной строки и без изменения типа платформы моего приложения (я пытался сделать это раньше, и это испортило большинство моих соединений OLEDB).

Любые ответы и предложения высоко ценятся. Кроме того, я очень извиняюсь за мой плохой английский.


person Genesis Mallari    schedule 05.07.2020    source источник
comment
Я пробовал это раньше и не работал. На самом деле я прочитал так много ссылок, подобных здесь, и я не уверен в этом. Они сказали, что osk.exe не может работать на 32-битной версии. а может я ошибаюсь....   -  person Genesis Mallari    schedule 05.07.2020
comment
Похоже, вы передаете все эти параметры в Path.Combine, а не только те части, которые составляют путь к исполняемому файлу. Вы пробовали Process.Start(Path.Combine(Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.System)).FullName, "Sysnative", "cmd.exe"), "/c osk.exe");?   -  person Rufus L    schedule 05.07.2020
comment
Спасибо, я попробовал, но он все еще открыт. Я также пробовал Process.Start(@c:\Windows\Sysnative\cmd.exe, /c osk.exe); и все еще получаю ту же проблему. возможно, есть ошибка с использованием Sysnative?   -  person Genesis Mallari    schedule 05.07.2020
comment
Может и так, вместо system32 пробовали?   -  person Rufus L    schedule 05.07.2020


Ответы (1)


Это должно работать, но не запускает CMD:

//specify full path - possible through environment variables
var psi = new ProcessStartInfo(@"c:\windows\system32\osk.exe"); 
psi.UseShellExecute = true;
var process = Process.Start(psi);
person Stefan    schedule 05.07.2020
comment
Спасибо за предложение, но оно не сработало. Я получил ошибку: System.ComponentModel.Win32Exception: «Система не может найти указанный файл» - person Genesis Mallari; 05.07.2020
comment
Ах да, извините, нужно указать путь - я проверял в админ режиме и тогда по умолчанию выставлено правильно - дайте знать, если работает - или у меня какие-то настройки пути, потому что и без админа работает - person Stefan; 05.07.2020
comment
Я попытался изменить его @C:\WINDOWS\system32\osk.exe, однако он по-прежнему показывает ту же ошибку. Я открыл расположение файла, в котором находится osk.exe, и просто скопировал его. может я что-то не так сделал с кодами - person Genesis Mallari; 05.07.2020
comment
@GenesisMallari: Где находится ваш osk.exe; мой был в системе32 - person Stefan; 05.07.2020
comment
хм, на самом деле это тот же C:\WINDOWS\system32. На самом деле я пытался скопировать файл osk.exe на другой диск (просто чтобы посмотреть, работает ли он), но не удивился тому, что он потерпел неудачу, ха-ха. Возможно, ему нужны права администратора, чтобы найти файл в system32? - person Genesis Mallari; 05.07.2020
comment
Действительно странно... здесь все работает безупречно... вы установили UseShellExecute, верно? - person Stefan; 05.07.2020
comment
да, я пробовал это, я думаю, что нашел проблему, потому что я запускаю свое приложение как 32-битное. следовательно, я не могу получить прямой доступ к osk.exe. возможно, мне следует просто терпеть небольшую боль от закрытия командной строки навсегда, хахаха .... В любом случае, большое спасибо - person Genesis Mallari; 05.07.2020
comment
Я также проверю поведение на моей стороне - person Stefan; 05.07.2020
comment
@GenesisMallari: я не могу это проверить, но 32-битная часть кажется маловероятной - факт в том, что вы запускаете новый процесс. Сомневаюсь, что он унаследует настройки совместимости - person Stefan; 05.07.2020