3

如何在 .Net DLL 中确定它是在 Windows GUI 应用程序还是 Web 服务中运行?我有一个在两个应用程序之间共享的低级类,并且需要在 Web 服务中使用它时禁用消息框。

Windows 应用程序有 200 多个解决方案,我无法重构现有代码。Web 服务需要重用一些功能,我正在寻找快速修复。

4

4 回答 4

5

只是一条一般建议,您的低级类可能不应该使用消息框本身,但应该允许中间(更接近界面)类来处理您可能需要消息框的情况。

如果您这样做了,那么您只需为 Web 使用与桌面不同的更高级别的类,并且每个类都将具有适合其上下文的通知工具。

于 2008-10-07T13:00:25.987 回答
4

如果它在 Web 上下文中运行,则 HttpContext.Current 不会为空。

于 2008-10-07T12:59:19.047 回答
3

您可以使用Environment.UserInteractive属性。

对于在没有用户界面的情况下运行的 Windows 进程或 IIS 等服务,UserInteractive 属性报告为 false。如果此属性为 false,则不要显示模式对话框或消息框,因为没有供用户交互的图形用户界面。

我知道您无法做到这一点,但是....您可能还想考虑一下您的应用程序设计。

于 2008-10-07T13:23:55.020 回答
0

我不知道这是否会奏效,但它可能会。使用这些 Win32 调用:

GetModuleFileNameEx 获取 dll 的 exe 并保存以供以后比较。
EnumWindows 获取所有顶级窗口。
GetWindowModuleFileName 将窗口句柄从 EnumWindows 转换为模块名称。

如果您可以在 GetWindowModuleFileName 的结果中找到您自己的 exe,那么您的 dll 正在 GUI 应用程序中运行。

于 2008-10-07T13:20:12.953 回答