2010-05-04 8 views
25

Mam aplikację konsoli w języku C# i chcę, aby użytkownik nie mógł go zobaczyć.Jak ukryć aplikację konsoli w języku C#

Jak mogę to zrobić?

+3

czy to usługa, którą chcesz uruchomić w tle? –

+0

Tak, ale nie chcę uruchamiać go jako usługi, chcę go uruchomić jako .exe – menacheb

+0

Jak uruchomi się aplikacja? – noocyte

Odpowiedz

51

przełożony jako aplikacja Windows Forms. Wtedy nie wyświetli żadnego interfejsu użytkownika, jeśli nie otworzysz jawnie żadnego systemu Windows.

+0

Dobry pomysł, spróbuję ... – menacheb

+0

Jest to prawdopodobnie najczęstszy i najprostszy sposób, aby to osiągnąć. –

+0

Niezupełnie. Po co zmieniać całą linię bazową, aby nie wyświetlać okna konsoli? To nie najlepszy pomysł. – Nayan

1

Można pinvoke wezwanie do FindWindow(), aby uzyskać dojście do okna, a następnie zadzwonić ShowWindow(), aby ukryć okno LUB Uruchom aplikację z innego używając ProcessStartInfo.CreateNoWindow

+0

Nie mam pojęcia, czy to działa, ale z pewnością brzmi śmiesznie! :) Zadzwoń ShowWindow(), aby ukryć ...;) – noocyte

+0

To jednak działa. –

+0

Zamiast hackowanego rozwiązania 'FindWindow()' wolałbym raczej [pobieranie uchwytu konsoli poprawnie] (http://stackoverflow.com/questions/3571627) ... – Timwi

5

Wygląda na to, że nie chcesz aplikacji konsoli, ale aplikacji GUI dla systemu Windows, która nie otwiera okna (widocznego).

4

Tworzenie aplikacji konsoli „MyAppProxy” z następującego kodu i umieścić MyAppProxy w rozruchu dir,

public static void main(string[] args) 
{ 
    Process p = new Process("MyApp"); 
    ProcessStartUpInfo pinfo = new ProcessStartUpInfo(); 
    p.StartupInfo = pinfo; 
    pinfo.CreateNoWindow = true; 
    pinfo.ShellExecute = false; 

    p.RaiseEvents = true; 

    AutoResetEvent wait = new AutoResetEvent(false); 
    p.ProcessExit += (s,e)=>{ wait.Set(); }; 

    p.Start(); 
    wait.WaitOne(); 
} 

może trzeba naprawić pewne rzeczy tutaj nie zrobił sprawdzić poprawność kodu, nie może kompilacja, ponieważ niektóre nazwy właściwości mogą być różne, ale mam nadzieję, że otrzymasz pomysł.

+0

To jest sposób, aby to zrobić. Sekretem jest właściwość CreateNoWindow. –

-3

Utwórz usługę wcf i hostuj ją zgodnie ze swoimi potrzebami.

+1

Myślę, że to jest mylące i całkowicie w złym kierunku. Zastosowania ukrytej aplikacji mogą być zupełnie inne niż usługi wcf. – ericosg

2

Najlepszym sposobem jest rozpoczęcie procesu bez okna.

 Process p = new Process(); 
     p.StartInfo.FileName = "cmd.exe"; 
     p.StartInfo.Arguments = "echo Hello!"; 
     //either.. 
     p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
     //or.. 
     p.StartInfo.CreateNoWindow = true; 
     p.Start(); 

Zobacz inne prawdopodobnych rozwiązań -

Toggle Process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden at runtime

i

Bring another processes Window to foreground when it has ShowInTaskbar = false

15

Na ProjectProperties określonych Typ wyjścia jak Windows Application.

2

Aby ukryć applicatin konsoli w C#, kiedy nic nie działa else użyć tego kodu:

[DllImport("kernel32.dll")] 
public static extern bool FreeConsole(); 

Place FreeConsole() gdziekolwiek w kodzie, umieściłem go w init(), a linia poleceń jest ukryta.

+0

Wygląda na to, że jest trochę bardziej trywialnie niż tylko to. Po odłączeniu procesu od konsoli za pomocą funkcji FreeConsole() konsola jest przerywana. Musisz pamiętać, aby przerwać proces po zakończeniu pracy, ponieważ nie ma dla ciebie konsoli, chyba że coś mi brakuje (daj mi znać, jeśli to zrobię). Mimo to bardzo schludna metoda. –

Powiązane problemy