2010-08-16 28 views
18

benim konsol uygulaması görünmez yapma. Konsol uygulaması, kullanıcı oturum açtığında ve bazı arka plan çalışmalarını yapar yapmaz çalışır.Bir okul projesi olarak benim halk kütüphanesi için bir konsol uygulama geliştiriyorum

Sorun şu ki, konsol uygulamasının gerçekten görünmesini istemiyorum. İhtiyacım yok. İhtiyacım olan son şey şikayetlerdir çünkü bazı insanlar bir CMD penceresinin açılıp kapandığından korkarlar, ayrıca kütüphanenin mümkün olduğu kadar görünmez olmasını ister.

ben bu iplik kod aşağıdaki çalıştı: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/ea8b0fd5-a660-46f9-9dcb-d525cc22dcbd

ama boşuna , hala onun çalışmalarının her şeyi yaptı sonra konsol uygulaması açık ve kapalı pop görebilirsiniz.

Konsolun görünmesini engellemek için daha iyi bir yol var mı? Teşekkürler.

+0

Kodumu denediniz mi? Hala problemlerle mi karşılanıyorsun? – Searock

cevap

36

Yapılacak en iyi şey, bir konsol uygulaması olarak derleme değil! Bir Windows EXE olarak derleyin ve hiçbir konsol görünmez. Daha sonra, bir UI göstermeden Ana yöntemde yapmanız gereken her şeyi yapabilirsiniz.

Ancak her durumda, konsol penceresini gizlemeniz/göstermeniz gerekiyorsa, bunun için daha güvenilir bir API olduğundan, bu görev için FindWindow'u kullanmamaya özen gösteririm: GetConsoleWindow. Bu size konsol penceresinin HWND'sini verecektir ve bunu ShowWindow'a geçirmeyi deneyebilirsiniz.

+1

Bu benim önerim olacaktı. +1. – David

+0

+! sezgisel, Microsoft stili için ... – NinjaCat

+0

Ah, anlıyorum. Peki bu, Visual Studio'da "Yeni Proje" kapsamında ne olurdu? "Boş Proje"? Çünkü normal bir .exe, sadece bazı formlar ve bir konsol uygulaması için bir seçenek göremiyorum. – Kratz

8

Denediniz mi: Proje Özellikleri> Uygulama> çıktı Türü: "Windows Uygulaması"?

+0

Sadece bunu yaptım ve şimdi uygulama kırıldı, dizinler oluşturmak ve Gömülü bir Kaynak dosyaları kopyalamak ve şimdi çalışmıyor. :( – Kratz

2

Bir konsol uygulamasından biraz daha karmaşık ... ama birileri oturum açtığında arka planda gerçekten bir şeyler çalıştırmak istiyorsanız, bir Windows Hizmeti uygulaması oluşturabilirsiniz.

Ama Windows hizmeti kurma ve yükleme biraz ek çalışma gerektirir ama internet üzerinde örnek kod bolluğu vardır:

http://msdn.microsoft.com/en-us/library/9k985bc9(v=VS.80).aspx

http://msdn.microsoft.com/en-us/library/sd8zc8ha(v=VS.80).aspx

http://www.c-sharpcorner.com/uploadfile/mahesh/window_service11262005045007am/window_service.aspx

http://www.developer.com/net/net/article.php/2173801/Creating-a-Windows-Service-in-NET.htm

http://www.codeproject.com/KB/dotnet/simplewindowsservice.aspx

+1

Bir havyar, bir kullanıcı oturum açmadan önce başlayacak ve belirli bir kullanıcı hesabına bağlı olmayan bir hizmet olacaktır.Bu ne yaptığınıza bağlı olarak işe yarayabilir veya baş ağrısına neden olabilir –

14

Josh Einstein, pencerenizi gizlemek için ShowWindow Api kullanabilirsiniz önerdi.

using System.Runtime.InteropServices 

class CommandLine 
{ 

    [DllImport("user32.dll")] 
    static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 

    [DllImport("Kernel32")] 
    private static extern IntPtr GetConsoleWindow(); 

    const int SW_HIDE=0; 
    const int SW_SHOW=5; 

    static void Main(string[] args) 
    { 
     IntPtr hwnd; 
     hwnd=GetConsoleWindow(); 
     ShowWindow(hwnd,SW_HIDE); 

     //Your logic goes here 
    } 
} 

ben bunu test etmedim bu kodu hakkında emin değilim:

İşte bir örnek. Herhangi bir sorunla karşılaşırsanız bana bildirin.

+1

işlemi başka bir işlemden başlattığınızda bir konsol penceresinin kısa bir yanıp sönmesi. – Wouter

2

Merhaba Görev zamanlayıcısı tarafından çağrılacak bir Konsol uygulaması oluşturuyordum. Konsol uygulamasının görünmesini istemedim, böylece Windows uygulamalarına çıkış için proje özelliklerini değiştirdim.

Değişim Windows uygulaması gidin çıktı türü için: Proje -> Proje Özellikleri Ve Searock en ile iki yöntem daha sonra 2) Searock ve 1) Josh --- çalıştı

0

Windows Uygulamasına çıktı türünü değiştirmek konsol uygulaması penceresinin hala çok kısa bir süre için görünmesine rağmen çözüldü - ancak Josh'un çözümü ile konsol görünmüyordu veya programımın herhangi bir sorunu yoktu - elbette tüm console.writeline çağrılarının yerine geçmek zorunda kaldım. bilgileri bir günlük dosyasına kaydetme çağrısı

Not: Sadece Josh'un çözümüne yorum yapabilirdim ama hat henüz yok :)