Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定在GUI应用程序或web服务中使用.Net DLL?_.net_Web Services_User Interface_Dll - Fatal编程技术网

如何确定在GUI应用程序或web服务中使用.Net DLL?

如何确定在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

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


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。