Apakah ada cara untuk menyembunyikan jendela konsol saat menjalankan aplikasi konsol?
Saat ini saya menggunakan aplikasi Windows Forms untuk memulai proses konsol, tetapi saya tidak ingin jendela konsol ditampilkan saat tugas sedang berjalan.
c#
console-application
Aaron Thomas
sumber
sumber
Jawaban:
Jika Anda menggunakan
ProcessStartInfo
kelas Anda dapat mengatur gaya jendela untuk disembunyikan - dalam kasus aplikasi konsol (bukan GUI), Anda harus mengatur CreateNoWindow ketrue
:sumber
Jika Anda menulis aplikasi konsol, Anda dapat membuatnya tersembunyi secara default.
Buat aplikasi konsol baru kemudian ubah tipe "Jenis Keluaran" menjadi "Aplikasi Windows" (dilakukan di properti proyek)
sumber
Jika Anda menggunakan Kelas Proses maka Anda dapat menulis
sebelum
yourprocess.start();
dan proses akan disembunyikansumber
Jawaban sederhananya adalah: Buka properti aplikasi konsol Anda (properti proyek). Di tab "Aplikasi", cukup ubah "Jenis keluaran" menjadi "Aplikasi Windows". Itu saja.
sumber
Anda dapat menggunakan API FreeConsole untuk melepaskan konsol dari proses:
(tentu saja ini hanya berlaku jika Anda memiliki akses ke kode sumber aplikasi konsol)
sumber
FreeConsole
melakukan apa yang namanya, itu tidak mencegah Windows menampilkan konsol sebelum dipanggil.[DllImport("kernel32.dll")] static extern bool AllocConsole();
memungkinkan Anda untuk dengan mudah menjalankan dengan konsol dari aplikasi Win32 standarJika Anda tertarik dengan hasilnya, Anda dapat menggunakan fungsi ini:
Itu menjalankan program baris perintah yang diberikan, menunggu untuk menyelesaikan dan mengembalikan output sebagai string.
sumber
Jika Anda membuat program yang tidak memerlukan input pengguna, Anda selalu bisa membuatnya sebagai layanan. Layanan tidak akan menampilkan UI apa pun.
sumber
Tambahkan ini ke kelas Anda untuk mengimpor file DLL:
Dan kemudian jika Anda ingin menyembunyikannya gunakan perintah ini:
Dan jika Anda ingin menampilkan konsol:
sumber
Saya tahu saya tidak menjawab apa yang Anda inginkan, tetapi saya ingin tahu apakah Anda mengajukan pertanyaan yang tepat.
Mengapa tidak Anda gunakan:
Itu terdengar seperti opsi yang lebih baik jika semua yang Anda inginkan adalah menjalankan proses.
sumber
Meskipun seperti jawaban lain di sini yang mengatakan Anda dapat mengubah "tipe Output" ke "Aplikasi Windows", perlu diketahui bahwa ini berarti Anda tidak dapat menggunakannya
Console.In
karena akan menjadi NullStreamReader.Console.Out
danConsole.Error
tampaknya masih berfungsi dengan baik.sumber
Console.In
ketika tidak ada konsol untuk memasukkan sesuatu? Dari mana datangnya sesuatu yang bisa diakses melaluiConsole.In
? Ini sama sekali tidak masuk akal. Dengan kata lain: Sangat jelas dan logis bahwaConsole.In
ini adalahNullStreamReader
dalam kasus ini.Berdasarkan jawaban Adam Markowitz di atas, berikut ini berhasil bagi saya:
sumber
Saya punya solusi umum untuk dibagikan:
Cukup sertakan kelas ini dalam proyek Anda, dan hubungi
Magician.DisappearConsole();
.Sebuah konsol akan berkedip ketika Anda memulai program dengan mengkliknya. Ketika mengeksekusi dari prompt perintah, prompt perintah menghilang sangat lama setelah eksekusi.
Saya melakukan ini untuk Discord Bot yang berjalan selamanya di latar belakang komputer saya sebagai proses yang tidak terlihat. Itu lebih mudah daripada membuat TopShelf bekerja untuk saya. Beberapa tutorial TopShelf gagal sebelum saya menulis ini dengan bantuan kode yang saya temukan di tempat lain. ; P
Saya juga mencoba mengubah pengaturan di Visual Studio> Proyek> Properti> Aplikasi untuk diluncurkan sebagai Aplikasi Windows, bukan Aplikasi Konsol, dan sesuatu tentang proyek saya mencegah hal ini menyembunyikan konsol saya - mungkin karena DSharpPlus menuntut untuk meluncurkan konsol saat startup . Saya tidak tahu Apa pun alasannya, kelas ini memungkinkan saya untuk dengan mudah membunuh konsol setelah itu muncul.
Semoga Penyihir ini membantu seseorang. ;)
sumber
Cukup tulis
sumber