我们可以将项目类型作为Windows服务的控制台应用程序吗?

时间:2015-11-02 04:46:02

标签: c# .net

我们可以在.Net中将项目类型作为Windows服务的控制台应用程序吗?通常对于Windows服务,我们将项目类型作为Windows应用程序?这样做需要做什么?

1 个答案:

答案 0 :(得分:1)

是的,你可以。 控制台应用程序和Windows应用程序之间的区别在于Environment.UserInteractive属性。但是,如果将控制台应用程序作为Windows服务运行,则无关紧要:)因此,无需选择项目类型作为控制台应用程序。

但是,如果您需要一个用于调试的控制台,您可以添加一些代码来显示Windows应用程序的控制台:

internal static class ConsoleAllocator
{
    [DllImport(@"kernel32.dll", SetLastError = true)]
    static extern bool AllocConsole();

    [DllImport(@"kernel32.dll")]
    static extern IntPtr GetConsoleWindow();

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

    const int SwHide = 0;
    const int SwShow = 5;


    public static void ShowConsoleWindow()
    {
        var handle = GetConsoleWindow();

        if (handle == IntPtr.Zero)
        {
            AllocConsole();
        }
        else
        {
            ShowWindow(handle, SwShow);
        }
    }

    public static void HideConsoleWindow()
    {
        var handle = GetConsoleWindow();

        ShowWindow(handle, SwHide);
    }
}

因此,您将拥有一个控制台,无需将项目类型切换到控制台应用程序。