2016-08-04 1 views
21

J'essaie d'automatiser certaines tâches pour moi-même et j'ai écrit quelques applications console .NET Core 1.0. L'un d'entre eux est BrowserRouter - une application simple qui, en fonction du modèle d'URL, décide quel navigateur/profil de navigateur ouvrir quand je clique sur les liens http (s).Est-il possible d'exécuter silencieusement l'application console .NET Core (masquer la fenêtre console)?

Cela fonctionne bien mais il y a toujours la fenêtre de console qui apparaît et disparaît immédiatement.

Existe-t-il un moyen d'exécuter l'application de console .NET Core en mode silencieux (en masquant la fenêtre de la console)?

Je connais pleinement. NET Framework, il est possible de changer le type de sortie en application Windows mais ce n'est pas disponible (encore?) Pour .NET Core.

+5

Qu'en est-il d'utiliser un service de fenêtres? – VahidNaderi

+3

Copie possible de [Comment exécuter une application console C# avec la console cachée] (http://stackoverflow.com/questions/836427/how-to-run-ac-sharp-console-application-with-the-console- caché) –

+3

@VahidNaderi .Net Core est X-Plat - je ne sais pas comment un service Windows fonctionnerait sous Linux/MAC. – DaveShaw

Répondre

0

Ce n'est probablement pas la solution la meilleure ou la plus propre, mais un truc que j'ai déjà utilisé. Si vous démarrez une nouvelle application Windows Forms, puis supprimez la référence au formulaire du fichier Program.cs, il exécutera l'application en arrière-plan sans rien afficher dans la barre des tâches ou sur le bureau. Il apparaît cependant dans le Gestionnaire des tâches. J'ai utilisé cette astuce pour écrire une application pour faire une blague sur un ami. Il fonctionnerait en arrière-plan et effectuerait un bip du système à des intervalles aléatoires. Encore une fois, probablement pas la solution la plus élégante, mais une façon de le faire.

+0

Si c'est une application Winform, vous pouvez simplement faire 'this.Hide()' et le formulaire n'est pas affiché. OP veut cacher la console. –

+2

Je ne pense pas que WinForms est supporté par le coeur de dotnet encore – OzieGamma

0

J'ai essayé d'éditer le fichier .xproj mais il semble qu'il soit ignoré par VS/dotnet. Je ne pense pas qu'il soit actuellement supporté car dotnet a été développé en pensant aux sites Web et aux applications de console. Microsoft a récemment décidé de revenir au bon vieux MSBuild. (https://blogs.msdn.microsoft.com/dotnet/2016/05/23/changes-to-project-json/)

Donc, je pense que votre meilleur pari est d'attendre jusque là.

12

Actuellement, ce n'est pas directement possible dès la sortie de la boîte car les fichiers Windows exe contiennent un indicateur indiquant si c'est une application "console" ou "GUI" que Windows évalue avant même de démarrer l'application. Cependant, ce drapeau peut être modifié en utilisant editbin.exe (livré avec les outils de construction C++ de VS).

Sur cette base, vous pouvez créer une application .NET autonome de base (suppression de l'"type": "platform" du project.json et en ajoutant une section runtimes) de sorte que votre sortie projet comprend un fichier .exe réel et ajouter un script de post-construction qui appelle editbin.exe /subsystem:windows yourapp.exe.

+0

Vous êtes le génie, cela a fonctionné! – docesam

+0

Il existe plus de documentation pour l'option SUBSYSTEM pour editbin.exe ici: https://docs.microsoft.com/en-us/cpp/build/reference/subsystem J'ai copié editbin.exe et link.exe dans un dossier sous ma solution. Dans VS2017 j'ai utilisé ce qui suit dans l'événement de post-construction pour mon projet: '" $ (SolutionDir) Build \ bin \ editbin.exe "-SUBSYSTEM: WINDOWS" $ (SolutionDir) Projet1 \ bin \ Debug \ netcoreapp1.1 \ win10-x64 \ Project1.exe "' Je ne sais pas si quelqu'un d'autre a eu cela, mais je n'ai pas pu obtenir beaucoup de macros pour fonctionner (peut-être parce que j'ai dû modifier le csproj pour le construire comme un exe). –

1

Si vous, comme moi, voulez déployer une application aspnet core mvc

  • sur un réseau interne
  • ne veulent pas IIS ou WebHostService
  • ne se soucient pas Linux/Mac
  • et que vous voulez cacher la console Kestrel de l'utilisateur

alors vous devriez lire la documentation officielle de Microsoft sur la façon de host an aspnet core in a Windows Service