Sembunyikan jendela konsol dari Proses. Mulai C #

102

Saya mencoba untuk membuat proses pada mesin jarak jauh menggunakan kelas System.Diagnostics.Process. Saya bisa membuat proses. Namun masalahnya, membuat layanan memakan waktu lama dan jendela konsol ditampilkan. Hal lain yang mengganggu adalah jendela konsol ditampilkan di atas formulir jendela saya dan saya tidak dapat melakukan operasi lain pada formulir itu. Saya telah mengatur semua properti seperti CreateNoWindow = true,

proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden

tapi tetap saja itu menunjukkan jendela konsol. bahkan saya telah dialihkan keluaran dan kesalahan untuk memisahkan aliran tetapi tidak berhasil.

Apakah ada cara lain untuk menyembunyikan jendela Konsol? Tolong bantu saya.

Berikut adalah bagian dari kode saya yang saya gunakan untuk menjalankan perintah sc.

Process proc = new Process();
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.FileName = "sc";
proc.StartInfo.Arguments = string.Format(@"\\SYS25 create MySvc binPath= C:\mysvc.exe");
proc.StartInfo.RedirectStandardError = false;
proc.StartInfo.RedirectStandardOutput = false;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
proc.WaitForExit();
Prasad
sumber
Sudahkah Anda mencoba menyetel proc.StartInfo.RedirectedStandardOutput = true? Saya mendapatkan ini untuk bekerja dengan Aplikasi Windows.
poy
ada solusi akhir dengan contoh kode sumber lengkap yang mengerjakannya?
Kiquenet
Di aplikasi konsol Windows , cukup mengatur UseShellExecute - tanpa pengalihan atau apa pun - berfungsi untuk saya. Lihat disini .
Paul
Sejauh jendela konsol membuka dan mengunci formulir, Anda harus menjalankan proses sebagai Tugas atau di Thread baru
Ryan Dooley
Mengapa Anda mengatur UseShellExecutedan CreateNoWindowdua kali?
Mike Lowery

Jawaban:

119

Saya mengalami masalah serupa saat mencoba memulai proses tanpa menampilkan jendela konsol. Saya menguji dengan beberapa kombinasi berbeda dari nilai properti sampai saya menemukan satu yang menunjukkan perilaku yang saya inginkan.

Berikut adalah halaman yang menjelaskan mengapa UseShellExecuteproperti harus disetel ke false.
http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.createnowindow.aspx

Di bawah bagian Keterangan di halaman:

Jika properti UseShellExecute benar atau properti UserName dan Sandi tidak null, nilai properti CreateNoWindow diabaikan dan jendela baru dibuat.

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = fullPath;
startInfo.Arguments = args;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;

Process processTemp = new Process();
processTemp.StartInfo = startInfo;
processTemp.EnableRaisingEvents = true;
try
{
    processTemp.Start();
}
catch (Exception e)
{
    throw;
}
John Bartels
sumber
2
Mau menambahkan beberapa detail tambahan? The mengapa ini bekerja daripada bagaimana .
aqua
2
Apakah karena keluaran standar memaksa jendela ada?
Denise Skidmore
1
Dan ternyata Anda tidak dapat mengarahkan keluaran standar tanpa pengaturanstartInfo.UseShellExecute = false;
Denise Skidmore
1
Saya ingin tahu mengapa, dalam jawaban lain ini mereka menggunakan UseShellExecute = true? stackoverflow.com/questions/2317767/c-process-start-hide
Denise Skidmore
10
Saya tidak akan pernah mengerti mengapa orang menangkap pengecualian yang mereka lemparkan lagi.
Blindy
54

Saya kurang beruntung dengan jawaban ini, dengan proses (Wix light.exe) pada dasarnya pergi keluar untuk makan siang dan tidak pulang tepat waktu untuk makan malam. Namun, berikut ini bekerja dengan baik untuk saya:

Process p = new Process();
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
// etc, then start process
John Lockwood
sumber
2
Bekerja untuk saya - bagus dan sederhana!
J c
2
Ini harus menjadi jawaban yang diterima. Bekerja seperti pesona.
Eternal21
2
CreateNoWindow = truetidak berhasil untuk saya, ini berhasil :)
Stefan Monov
3
Ini hanya berfungsi untuk aplikasi dengan jendela, aplikasi konsol masih menampilkan jendela
Geograf
18

Ini harus berhasil, coba;


Tambahkan Referensi Sistem.

using System.Diagnostics;

Kemudian gunakan kode ini untuk menjalankan perintah Anda di jendela CMD tersembunyi.

Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
cmd.StartInfo.Arguments = "Enter your command here";
cmd.Start();
Roshana Pitigala
sumber
11

Ini tidak menunjukkan jendela:

Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
cmd.StartInfo.CreateNoWindow = true;

...
cmd.Start();
Leonardo Rignanese
sumber