如何确定在GUI应用程序或web服务中使用.Net DLL?
如何在.Net DLL中确定它是在Windows GUI应用程序中运行还是在web服务中运行?我有一个低级类,它在两个应用程序之间共享,当它用于web服务时,需要禁用消息框如何确定在GUI应用程序或web服务中使用.Net DLL?,.net,web-services,user-interface,dll,.net,Web Services,User Interface,Dll,如何在.Net DLL中确定它是在Windows GUI应用程序中运行还是在web服务中运行?我有一个低级类,它在两个应用程序之间共享,当它用于web服务时,需要禁用消息框 Windows应用程序有200多个解决方案,我无法重新考虑现有代码。web服务需要重用一些功能,我正在寻找一个快速解决方案。如果它在web上下文中运行,HttpContext.Current将不会为null。只是一条一般性建议,您的低级类可能不应该使用消息框本身,但应该允许一个中间类(靠近接口)类来处理可能需要message
Windows应用程序有200多个解决方案,我无法重新考虑现有代码。web服务需要重用一些功能,我正在寻找一个快速解决方案。如果它在web上下文中运行,HttpContext.Current将不会为null。只是一条一般性建议,您的低级类可能不应该使用消息框本身,但应该允许一个中间类(靠近接口)类来处理可能需要messagebox的情况
如果您这样做了,那么您只需在web上使用不同于桌面的高级类,并且每个类都有适合其上下文的通知功能。我不知道这是否可行,但可能可行。使用以下Win32调用: GetModuleFileNameEx以获取dll的exe并将其保存以供以后比较。
枚举窗口以获取所有顶级窗口。
GetWindowModuleFileName将窗口句柄从EnumWindows转换为模块名称 如果您可以在GetWindowModuleFileName的结果中找到自己的exe,那么您的dll正在GUI应用程序中运行。您可以使用该属性 UserInteractive属性报告 对于Windows进程或 像IIS这样的服务,运行时没有 用户界面。如果这个属性是 false,不显示模式对话框或 消息框,因为没有 用户的图形用户界面 与…互动
我知道你做不到,但是。。。。您可能还需要考虑您的应用程序设计。这就是答案。重构库类中的所有messagebox使用。调用者有责任解释结果并通知用户。但是,请注意,此Environment.UserInteractive适用于任何“与显示关联”的应用程序。这还包括控制台应用程序(当然也可以显示消息框,但您可能不希望这样)。在本例中,HttpContext.Current也将为null。