之前我使用过这种方法,但现在我被卡住了。 我有一个Windows窗体应用程序(实际上是一个Windows服务),可以作为“交互式”应用程序运行。在这种情况下,我使用AllocConsole()为应用程序创建一个控制台。 控制台已创建,我在任务栏上看到它,但它仅部分可用于应用程序。
NativeMethods.AllocConsole(); // console window is created, at this point GetConsoleWindow() is returning nonzero handle
Console.Title = $"{service.ServiceName} console mode log"; // Console title is set
Console.SetBufferSize(140, 100); // Exception is thrown: "The handle is invalid."
堆栈跟踪是:
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.Console.GetBufferInfo(Boolean throwOnNoConsole, Boolean& succeeded)
at System.Console.GetBufferInfo()
at System.Console.SetBufferSize(Int32 width, Int32 height)
at PCSService.PCSService.Main(String[] args) in D:\Workspace\SolutionFolder\ProjectName\ServiceRunner.cs:line 84
如果之前发生这种情况,我已从HKCU / Console中删除了密钥,但现在没有任何内容可以删除。我无法想象,这与我从.net 4.6切换到.net 4.7的事实有关,但谁知道...
更新:
在同一台机器上,使用完全相同的代码但使用VS2015目标.net 4.6.2编译的解决方案正在按预期运行:
新项目的目标是.net 4.7,内置于VS2017。
欢迎任何建议......