1

这是基于 C# 的。我有一个类库,我想具体了解它是否是从基于 Windows 的应用程序中调用的

我搜索了很多,但我发现的只是知道它是否是从控制台应用程序调用的代码。我只想知道它是否从基于 Windows 的应用程序中调用

请帮忙

4

1 回答 1

0

如果您想知道应用程序是作为服务还是系统应用程序运行,因此无法显示对话框,请测试 Environment.UserInteractive 的状态。

没有简单的方法来确定应用程序是基于 Windows 还是基于 cmd 的应用程序。例如,我可能会构建一个基于 winforms 的应用程序,它不创建窗口,而是通过不打开窗口作为命令行样式的应用程序运行。

测试它是否是基于 Windows 的应用程序的两种(不一定可靠)方法是测试 Application.OpenForms (如果它包含表单,则它是一个 Windows 应用程序)或 Environment.GetCommandLineArgs() (如果 0 args,假设它是一个 Windows应用程序)。

如果您绝对需要知道应用程序是控制台还是 Windows 应用程序,那么您需要走出托管代码的世界,开始使用非托管 C++ 代码深入研究 exe 文件。在 exe 文件的 PE 头中,两者之间只有一个字节的差异:对于 windows 应用程序,子系统设置为 2,对于 cmd 应用程序,子系统设置为 3。如果您真的想这样做,请参阅http://msdn.microsoft.com/en-us/library/ms809762.aspxhttp://support.microsoft.com/kb/90493/en-us了解详细信息。

于 2013-10-01T10:07:03.733 回答