Windows 或 ASP.NET 服务中的 System.Drawing

2024-03-01

根据MSDN http://msdn.microsoft.com/en-us/library/system.drawing.aspx,在 中使用类并不是一个特别好的主意系统图Windows 服务或 ASP.NET 服务中的命名空间。现在我正在开发一个类库,它可能需要访问这个特定的命名空间(用于测量字体),但不能保证主机进程不是服务。

现在,如果 System.Drawing 不可用,我可以使用一种不太理想的方法,但如果可能的话,我宁愿使用 System.Drawing 中的类。所以我想做的是在运行时确定 System.Drawing 是否安全,如果是,则使用它,否则回退到次优选项。

我的问题是:我如何检测 System.Drawing 是否可以安全使用?

我想我应该

  • 检测当前进程是Windows服务还是ASP.NET服务
  • 检测GDI是否可用
  • 或者也许有一种方法可以询问 System.Drawing.dll 本身是否可以安全使用

不幸的是,我无法想出实现这些方法的方法。有人有什么主意吗?


为了消除任何混乱,System.Drawing 确实work在 ASP.NET 和服务下,它不是支持的。可能会出现高负载(耗尽非托管资源)、内存或资源泄漏(实施不当或称为处置模式)和/或在没有桌面显示对话框时弹出的问题。

测试将解决后者,而监控将提醒您注意前者。但是,如果/当您遇到问题时,不要指望能够致电 PSS 并请求修复。

那么,你有什么选择?好吧,如果您不需要完全支持的路线,并且您不期望极端负载 - 很多人都会无视 MSDN 警告并成功使用 System.Drawing。他们中的一些人被咬了,但成功的故事比失败的故事多得多。

如果您想要支持某些功能,那么您需要知道您是否正在交互运行。就我个人而言,我可能会将其留给托管应用程序在某处或其他地方设置非交互式标志。毕竟,应用程序最能确定它们是否处于托管环境中和/或想要冒 GDI+ 问题的风险。

但是,如果你想自动检测你的环境,我想有比提供的更糟糕的答案就在这儿 https://stackoverflow.com/questions/200163/am-i-running-as-a-service#200183为了一项服务。总而言之,您可以检查 EntryAssembly 以查看它是否继承自 ServiceBase,或者尝试访问 System.Console。对于 ASP.NET,同样,检测 HttpContext.Current 就足够了。

I'd think会有一种托管或 p/invoke 方式来查找桌面(我认为这实际上是所有这一切的决定因素)和/或 AppDomain 之外的东西,这会提示您。但我不确定什么确实如此,MSDN 对此缺乏启发。

编辑:浏览MSDN,我记得它实际上是一个窗口站 http://alt.pluralsight.com/wiki/default.aspx/Keith.GuideBook/WhatIsAWindowStation.html(托管桌面)这是这里的重要一点。有了这些信息,我就能找到获取进程窗口站() http://msdn.microsoft.com/en-us/library/ms683225(VS.85).aspx它返回当前窗口站的句柄。将该句柄传递给获取用户对象信息() http://msdn.microsoft.com/en-us/library/ms683238(VS.85).aspx会给你一个用户对象标志 http://msdn.microsoft.com/en-us/library/ms686892(VS.85).aspx如果你有一个可见的桌面,struct with 应该有一个带有 WSF_VISIBLE 的 dwFlags 。

或者,枚举 Windows 站 http://msdn.microsoft.com/en-us/library/ms682644(VS.85).aspx将为您提供可以检查的电台列表 - WinSta0 是交互式电台。

但是,是的,我仍然认为只要让应用程序设置一个属性或其他东西就可以了much更方便的路线....

再次编辑:7年后,我发现了环境.用户交互 https://msdn.microsoft.com/en-us/library/system.environment.userinteractive(v=vs.110).aspx哪里 MSGetProcessWindowStation 是否准确跳舞 http://referencesource.microsoft.com/#mscorlib/system/environment.cs,7d2f1469d916fc63我在上面为您描述了......我仍然建议委托给托管应用程序(他们很可能want速度更快,但风险稍高的 System.Drawing 路径),但 UserInteractive 似乎是一个很好的默认设置,无需让它自己调用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 或 ASP.NET 服务中的 System.Drawing 的相关文章

  • 从 unsigned char* 到 char* 的转换无效

    这是一个代码 1 int main int argc char argv 2 3 signed char S psc 4 unsigned char U pusc 5 char C pc 6 7 C S 8 C U 9 10 pc psc
  • 为什么迭代器类型推导失败? [复制]

    这个问题在这里已经有答案了 为什么这在 C 中不起作用 为什么我不能限制foo的参数为std vector
  • 如何准备sql语句并绑定参数?

    不幸的是 文档 http www sqlite org完全缺乏示例 这真的很奇怪 就好像它假设所有读者都是优秀的程序员一样 然而 我对C 并且无法真正从文档中弄清楚如何真正准备和执行语句 我喜欢它的实施方式PDO for PHP 通常 我只
  • 仅针对某些异常类型中断

    我知道异常处理是一件非常重要的事情 我们在所有项目中都在这样做 主要原因是记录客户发生的错误 这工作正常 根本不是问题 但是 当我仍在使用 Visual Studio 编码和运行应用程序时 我根本不需要任何异常处理 我希望调试器正好停在应用
  • “为 .Net 1.1 生成 Web 服务代理的任何工具”

    我有一个 WSDL 文件 其中包含指向外部 XSD 的链接 我也将 xsd 部署到了正确的相对路径 因为它在 WSDL 中是引用的 当我尝试使用 VS 2003 Net 1 1 wsdl 工具 生成代理时 代理未生成 然而它在 VS 200
  • Xcode 新手无法用 C++ 打开文件?

    我一直在我参加的课程中使用 Windows 但我正在尝试运行基本代码来弄清楚如何从 Xcode 上的文件打开 关闭 输入 输出 而我通常在 Visual Studio 上使用的代码不是不知道为什么 谢谢 include
  • 如何检查给定调用站点的重载决策集

    如何检查重载解析集 我在多个调用站点中使用了 4 个相互竞争的函数 在一个调用站点中 我期望调用一个函数 但编译器会选择另一个函数 我不知道为什么 这不是微不足道的 为了了解发生了什么 我正在使用enable if disable if打开
  • C# 中不区分大小写的替换不使用正则表达式?

    有没有一种方法可以在不使用 C 中的正则表达式的情况下对字符串进行不区分大小写的替换 像这样的东西 string x Hello x x Replace hello hello world 你可以尝试类似的东西 string str Hel
  • Moq - 是否可以在不使用 It.IsAny 的情况下设置模拟

    我一直使用 Moq 进行单元测试 有时我会嘲笑有很多参数的方法 想象一下这样的方法 public class WorkClient public void DoSomething string itemName int itemCount
  • 使用 C# 的异步 WebRequest

    您好 我有一个函数 它将 url Get 参数传递到网络服务器上的 php 文件 并等待文件的响应 通常需要 10 20 秒 我想将其放入一个循环中 因为我必须一次将这些 Get 请求发送到大约 5 个不同的 php 文件 但是当我尝试将其
  • PowerShell 与 MongoDB C# 驱动程序方法不兼容?

    由 C 泛型引起的最新 MongoDB 驱动程序的问题 Cannot find an overload for GetCollection and the argument count 1 我可能可以使用其他没有泛型的 GetCollect
  • C# 从今天起 30 天

    我需要我的应用程序从今天起 30 天后过期 我会将当前日期存储在应用程序配置中 如何检查应用程序是否已过期 我不介意用户是否将时钟调回来并且应用程序可以正常工作 用户太愚蠢而不会这样做 if appmode Trial string dat
  • 没有 FPU 的处理器中的浮点计算

    是否可以在没有浮点单元的嵌入式处理器中执行浮点运算 是的 您只需要在软件中完成即可 你的编译器可能会提供支持 http gcc gnu org onlinedocs gccint Soft float library routines ht
  • 为什么在 C++ 类中的数据成员上使用像 m_ 这样的前缀?

    许多 C 代码使用语法约定来标记数据成员 常见的例子包括 m memberName对于公共成员 在所有使用公共成员的情况下 memberName对于私人会员或所有会员 其他人尝试强制使用this gt member每当使用数据成员时 根据我
  • 如何编写完全可移植的 4 字节字符常量的编译时初始化

    遗留 代码大致如下所示 define MAKEID a b c d UInt32 a lt lt 24 UInt32 b lt lt 16 UInt32 c lt lt 8 UInt32 d define ID FORM MAKEID F
  • 如何在c#中获取斐波那契数

    伙计们 我有一个关于斐波那契的问题 如何获得斐波那契数列 该数字也将以用户输入结束 例如 如果我输入 21 则输出必须为 0 1 1 2 3 5 8 13 21 这是我的代码 static void Main string args int
  • VB.NET 是否优化字符串文字的串联?

    如同this https stackoverflow com questions 288794 does c optimize the concatenation of string literals问题 但对于 VB NET 来说 因为我
  • 从 git 签出后 nuget dll 丢失

    I have a C solution containing different projects On those projects I have some normal nuget packages like Newtonsoft Js
  • 在地图上使用 find

    如何使用 find 和 aconst iterator如果你有一个地图定义为 typedef std pair
  • 使用 ImageResizer 获取图像尺寸的最佳方法

    我正在将现有的 MVC 4 网站从自制用户文件上传切换为在上传时使用 ImageResizer 调整文件大小 我在文档中看到我不应该使用 System Drawing 但我无法找出任何其他获取图像尺寸的方法 尺寸是来自原始图像还是调整大小的

随机推荐

  • apache poi XSSFClientAnchor 未相对于 dx1、dy1、dx2、dy2 定位图片

    我正在尝试使用添加图像到Excelapache poi 版本3 16 我能够做到这一点HSSFWorkbook and XSSFWorkbook 但是当我尝试为图像添加间距时 即如果我设置dx1 dy1 dx2 dy2坐标在XSSFClie
  • Redis / Node.js - 2 个客户端(1 个发布/订阅)导致写入问题

    尝试创建两个客户端 一种是发布 订阅 另一种是标准连接 这不可能吗 必须有一种方法可以将其抽象为工作 基本上 如果我做一个get key运行 test js 后 我看到的只是 valueBefore 输出 node test js Repl
  • 地理编码地址 - 获取某个地址的区域(Google API)

    我有一个包含确切地址的数据库 街道 号码 城市 地区 地区 国家 但是 我想知道如果我们在纽约 是否有办法使用 Google API 来获取城市的区 例如 曼哈顿 所有其他信息我都已经在数据库中了 所以我只需要该地区 如果有的话 当然这只会
  • WPF自定义控件的ToolTip MultiBinding问题

    当我在 WPF 自定义控件中设置 ToolTip 绑定时 这种方式效果完美 public override void OnApplyTemplate base OnApplyTemplate SetBinding ToolTipProper
  • sbt-idea 1.2.0 未解决 SBT 0.12.0 和 Scala 2.10.0 问题?

    我正在创建一个新的 SBT 项目 以下是我的 SBT 文件的内容 构建属性 sbt version 0 12 0 插件 sbt addSbtPlugin com github mpeltonen sbt idea 1 2 0 构建 sbt
  • Java 字节码 DUP

    我想知道为什么以下字节码中的异常 用于抛出异常 是重复的 NEW java lang IllegalArgumentException DUP INVOKESPECIAL java lang IllegalArgumentException
  • PySpark 中的微秒时间戳

    我正在尝试使用 pyspark 中的以下语法将微秒字符串转换为时间戳 然而 我似乎得到了null当我转换时 我正在使用 Spark 2 2 我的字符串看起来像20180503 07 05 00 008288 我正在使用以下代码转换为时间戳
  • Azure Active Directory 应用程序权限更改延迟

    我正在使用 Azure Active Directory 为我的应用程序提供对 Microsoft Graph API 的访问权限 当我进行权限更改 例如 对各种类型数据的读 写访问权限 时 我注意到从保存更改到我能够通过 API 访问新数
  • 在 RSpec 中存根 RestClient 响应

    我有以下规格 describe successful POST on user create do it should redirect to dashboard do post user create name gt dave email
  • 在带有 npm 的 Lambda 函数中使用 AWS Cognito

    我正在尝试在 Lambda 函数中使用 AWS Cognito 来授权用户 我有一些来自 Udemy 课程的示例代码 不再可用 https www udemy com minimum viable aws cognito user auth
  • 使用 javascript 测试多屏幕

    是否可以判断网站的用户是否使用多个显示器 我需要找到弹出窗口的位置 但用户很可能有多个显示器设置 同时window screenX等将给出浏览器窗口的位置 这对于多个显示器来说是无用的 我在 StackOverflow 上的任何地方都没有找
  • 如何在 iPhone 上记录 SQLite 查询

    我正在开发一个 iPhone 应用程序 并且使用 SQLite 问题是我的查询有一些问题 我做了错误的绑定 所以 这是我的问题 如何使用 SQLite 接收的绑定在我的 iPhone 应用程序中登录有效的 SQL 查询 语句 Thanks
  • 2 个以上线程写入/读取变量的真正危险

    同时读 写单个变量的真正危险是什么 如果我使用一个线程写入一个变量 另一个线程在 while 循环中读取该变量 并且在写入变量时读取该变量并且使用旧值 则不会有危险 这里还有什么危险 同时读 写是否会导致线程崩溃 或者当发生精确的同时读 写
  • 在asp.net core中模拟用户

    我有来自常规 mvc 应用程序的以下代码 它通过模拟用户上传文件 public class PublicController Controller public const int LOGON32 LOGON INTERACTIVE 2 p
  • C++ 映射中的 C 样式数组

    注意 这个问题仅涉及 C 中的映射和数组 碰巧我正在使用 OpenGL 所以那些没有 OpenGL 知识的人不应该阻止进一步阅读 我正在尝试将 C 样式数组放入 C 中std map供以后设置颜色时使用 const map
  • 从 Gorm 模型创建主键时出现问题

    从 Gorm 模型创建主键时 它返回错误 重复列名 id 我的模型看起来像 type User struct gorm Model Id string gorm primary key FirstName string LastName s
  • 在 PHP 闭包中注入代码

    我有一个已经定义的闭包 我想在执行它时在其中注入代码 这是一个例子 predefined print my predefined injected code br closure function print hello br call u
  • 有效证书上的 axios 证书已过期[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 编辑 这是由于https letsencrypt org docs dst root ca x3 expiration septe
  • 流星从复选框 switchChange 中检索 true/false 值

    我有一个附加到复选框的事件处理程序 我正在使用引导开关http www bootstrap switch org http www bootstrap switch org 我试图将 true 或 false 的状态值获取到变量中 以便我可
  • Windows 或 ASP.NET 服务中的 System.Drawing

    根据MSDN http msdn microsoft com en us library system drawing aspx 在 中使用类并不是一个特别好的主意系统图Windows 服务或 ASP NET 服务中的命名空间 现在我正在开