Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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
C# 如何检查上下文是Windows服务还是控制台应用程序_C# - Fatal编程技术网

C# 如何检查上下文是Windows服务还是控制台应用程序

C# 如何检查上下文是Windows服务还是控制台应用程序,c#,C#,填空: 如果DLL上的一段代码是从不同的上下文中使用的,并且我们需要确定在哪个上下文上运行,那么我们必须使用: Web应用程序->System.Web.HttpContext.Current!=空 WCF Web服务->System.ServiceModel.Operationcontext.Current!=空 Windows服务| |控制台AP->\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

填空:

如果DLL上的一段代码是从不同的上下文中使用的,并且我们需要确定在哪个上下文上运行,那么我们必须使用:

Web应用程序->
System.Web.HttpContext.Current!=空

WCF Web服务->
System.ServiceModel.Operationcontext.Current!=空

Windows服务| |控制台AP->
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

另外,如果您知道检查前两个选项中的一个更好的选项,请告诉我们

关于它可能是重复的事实:我不需要区分windows服务和控制台应用程序(用户交互与否)

编辑:我为什么需要它?

我需要从可以在不同上下文中运行的库中打开正在运行的应用程序的配置文件。这就是我目前拥有的:

Configuration appConfig = null;

if (System.Web.HttpContext.Current != null || System.ServiceModel.OperationContext.Current != null)
{
    // The call was originated from a web application or from a WCF web service.
    appConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
}
else
{
    // The call may have been originated from a console application or a windows service.
    // THE ANSWER TO MY SO QUESTION WOULD ALLOW ME TO INSERT AN IF HERE!!
    appConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
}
else部分假设我在类似exe的环境(windows服务、控制台应用程序)上运行。我希望包含一个
if
,以确保
OpenExeConfiguration
不会引发异常


我已经考虑过使用try块,但这不适合我的情况。

我认为这是一个非常脆弱的结构,但是如果您检查是否以字符串
web.config
结尾,您可以验证当前应用程序域是否在web服务器中运行,因此,您可以调用
System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(“~”)
获取
配置
实例


反之亦然:如果它以
.exe.config
结尾,则可以使用
ConfigurationManager.OpenExeConfiguration(…)

@user2893289我编辑了我的问题,以说明为什么它不是重复的。也许你应该解释为什么你需要知道这一点。几乎总是最好公开扩展点,这样你的消费者就可以插入并选择最合适的行为,而不是“神奇地”打开你的DLL决定最佳方式。您不只是在寻找“获取当前应用程序默认配置的AppSettingsSection数据”吗?@CodeCaster我已经知道如何识别和打开webapp和wcf上下文的配置文件。唯一缺少的是如何识别我是否在windows服务上下文上运行。这样,我的问题就解决了。我将更新标题以反映这样一个事实:在这种情况下,windows服务上下文将等同于控制台应用程序上下文。感谢您的评论:)我喜欢这种方法,因为它实际上是可行的,但您给出的答案是如何确定您需要打开web.config,而问题是如何确定您需要使用OpenExeConfiguration,因为我们在类似exe的上下文中。因此,可以检查
AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
是否以“.exe.config”结尾。你同意吗?是的,我同意它很脆弱,不理想,但有时你别无选择。