c# - 通过程序逻辑添加控制台

标签 c# service

我有一个 Windows 服务。如果我从调试器启动它,我想使用控制台输出运行(因为你不能运行服务)。

通常 Windows 服务被设置为 WindowApplication 作为项目类型并且没有“窗口”入口点。因此它删除了旧的控制台。

如果您想要一个控制台窗口,您需要将项目类型更改为 ConsoleAppication。我想在程序本身内执行此操作,而不是更改项目设置。

这可能吗?

最佳答案

实际上,您可以在程序启动时使用一个简单的检查来查看它是否作为服务运行,然后使用 AllocConsole 命令启动控制台。这是示例代码。

namespace TestService 
{
   static class Program
   {
        [DllImport("kernel32.dll")]
        static extern bool AllocConsole();

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main()
        {
            if (!Environment.UserInteractive)                                
            {
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[] 
                { 
                    new Service1() 
                };
                ServiceBase.Run(ServicesToRun);
            }
            else 
            {
                AllocConsole();
                //Start Code that interfaces with console.
            }           
         }        
     }
 }

关于c# - 通过程序逻辑添加控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9006374/

相关文章:

c# - 使用 C# 和 LightGBM 进行基于 GPU 的二元分类是否可行(还?)

android - Android 中的关机事件

android - 服务已启动但未显示在设置 -> 正在运行的服务中

c# - 从cs文件渲染html到cshtml

android - 重复上传数据到服务器

android - 服务如何将结果返回给 Activity

c++ - 如何捕获 Windows 服务的标准错误输出?

c# - 如何配置 Visual Studio 来执行 HTML5 标准?

c# - 从 <div class> 获取带有 <a href> child 的 innerText

c# - 如何在 C# 中编码和解码特殊字符