问题标签 [system.management]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
634 浏览

c# - 仅使用 WMI 查询获取真正的适配器信息?

我试图使用 WMI 获取一些系统信息,
但问题是当我想获取例如图形卡信息时.. 我有很多驱动程序(真实和虚拟)

结果是:
Radmin Mirror Driver v3
ATI Mobility Radeon HD 5650
LogMeIn Mirror Driver
PCI GDIHOOK5

所以我决定编辑查询以仅获取真实的查询。在这种情况下,真实的查询应该具有不等于 null 的 AdapterRam

结果是:
ATI Mobility Radeon HD 5650
字节数

有没有更好和更通用的方法来只在 WMI 中获取真正的 adpaters?

0 投票
2 回答
4360 浏览

clrstoredprocedure - 在哪里可以找到 System.management dll

我正在尝试构建一个引用 IBM WebSphere MQ dll 的 SQL CLR 存储过程。我在我的工作机器上执行此操作时遇到问题,所以我决定看看我是否可以使用 localhost 让它在我的家庭计算机上工作。我在遇到不同的错误方面取得了进展,但是我不确定 system.management dll 的位置...

这是错误消息的副本:

消息 10301,级别 16,状态 1,第 1 行程序集“amqmdnet”引用程序集“system.management,版本=2.0.0.0,文化=中性,publickeytoken=b03f5f7f11d50a3a.”,当前数据库中不存在。SQL Server 试图从引用程序集所在的同一位置定位并自动加载引用程序集,但该操作失败(原因:2(系统找不到指定的文件。))。请将引用的程序集加载到当前数据库中,然后重试您的请求。

0 投票
1 回答
978 浏览

c# - Get-WMIObject 无法在提升的 powershell 中枚举 Win32_LogicalDiskToPartiion

我有一个非常简单的 Powershell 查询:

在 Windows 7(64 位)机器上,在 Powershell 中运行它会正确枚举单个管理对象。但是,如果我在提升的 Powershell 中运行相同的查询,我会暂停很长时间,然后没有结果。

我在尝试在代码中执行 WMI 查询时发现了一个类似的问题(这是我实际上想要做的)——当我的程序在没有提升的情况下运行时,代码可以工作,当它在提升的情况下运行时没有返回结果。这是显示此问题的代码的最简单版本:

为什么会这样?更重要的是,无论如何,我可以确保在提升运行时此查询将正确执行 - 因为最终程序由于其他原因需要运行提升。

0 投票
3 回答
1876 浏览

c# - MSTest 期间终结器中的 NullReferenceException

(我知道,这是一个非常长的问题。到目前为止,我试图将这个问题与我的调查分开,所以它更容易阅读。)

我正在使用 MSTest.exe 运行我的单元测试。有时,我会看到此测试错误:

关于单个单元测试方法:“在测试运行时代理进程已停止。”

在整个测试运行中:

所以,这就是我认为我需要做的事情:我需要找出导致 MetaDataInfo 错误的原因,但我正在画一个空白。我的单元测试套件运行需要半个多小时,而且错误不是每次都发生,所以很难让它重现。

有没有其他人在运行单元测试时看到过这种类型的失败?您是否能够将其追踪到特定组件?

编辑:

被测代码混合了 C#、C++/CLI 和一些非托管 C++ 代码。非托管 C++ 仅在 C++/CLI 中使用,从不直接从单元测试中使用。单元测试都是 C#。

被测代码将在独立的 Windows 服务中运行,因此 ASP.net 或类似的东西没有任何复杂性。在被测代码中,有线程启动和停止、网络通信和本地硬盘驱动器的文件 I/O。


到目前为止我的调查:

我花了一些时间在我的 Windows 7 机器上挖掘 System.Management 程序集的多个版本,并在我的 Windows 目录中的 System.Management 中找到了 MetaDataInfo 类。(Program Files\Reference Assemblies 下的版本要小得多,并且没有 MetaDataInfo 类。)

使用 Reflector 检查这个程序集,我发现 MetaDataInfo.Dispose() 中似乎有一个明显的错误:

向后使用此“if”语句,MetaDataInfo 将泄漏 COM 对象(如果存在),或者抛出 NullReferenceException(如果不存在)。我已经在 Microsoft Connect 上报告了这一点:https ://connect.microsoft.com/VisualStudio/feedback/details/779328/

使用反射器,我能够找到 MetaDataInfo 类的所有用途。(它是一个内部类,所以只搜索程序集应该是一个完整的列表。)它只有一个地方使用:

由于 MetaDataInfo 的所有使用都被正确处理,这就是正在发生的事情:

  • 如果 MetaDataInfo.importInterface 不为空:
    • 静态方法 GetMvid 返回 MetaDataInfo.Mvid
    • using调用 MetaDataInfo.Dispose
      • Dispose 泄漏 COM 对象
      • Dispose 将 importInterface 设置为 null
      • Dispose 调用 GC.SuppressFinalize
    • 稍后,当 GC 收集 MetaDataInfo 时,会跳过终结器。
  • .
  • 如果 MetaDataInfo.importInterface 为空:
    • 静态方法 GetMvid 获取调用 MetaDataInfo.Mvid 的 NullReferenceException。
    • 在异常向上传播之前,using调用 MetaDataInfo.Dispose
      • Dispose 调用 Marshal.ReleaseComObject
        • Marshal.ReleaseComObject 引发 NullReferenceException。
      • 因为抛出异常,Dispose 不会调用 GC.SuppressFinalize
    • 异常传播到 GetMvid 的调用者。
    • 稍后,当 GC 收集到 MetaDataInfo 时,它会运行 Finalizer
      • 完成调用 Dispose
        • Dispose 调用 Marshal.ReleaseComObject
          • Marshal.ReleaseComObject 抛出一个 NullReferenceException,它一直传播到 GC,应用程序被终止。

对于它的价值,这里是来自 MetaDataInfo 的其余相关代码:


编辑2:

我能够在 Microsoft 的 MetaDataInfo 类中重现该错误。但是,我的复制与我在这里看到的问题略有不同。

  • 复制:我尝试在不是托管程序集的文件上创建 MetaDataInfo 对象。importInterface这会在初始化之前从构造函数中引发异常。
  • 我对 MSTest 的问题:MetaDataInfo 是在某个托管程序集上构造的,并且在初始化 之前发生了一些事情使importInterfacenull 或退出构造函数。importInterface
    • 我知道 MetaDataInfo 是在托管程序集上创建的,因为 MetaDataInfo 是一个内部类,并且唯一调用它的 API 是通过传递Assembly.Location的结果来实现的。

但是,在 Visual Studio 中重新创建问题意味着它为我将源下载到 MetaDataInfo。这是实际代码,以及原始开发人员的评论。

原始代码证实了在反射器中看到的内容:if 语句是向后的,它们不应该从终结器访问托管对象。

我之前说过,因为它从来没有调用ReleaseComObject,它正在泄漏 COM 对象。我阅读了更多关于 .Net 中使用 COM 对象的信息,如果我理解正确,那是不正确的:调用 Dispose() 时 COM 对象没有被释放,但是当垃圾收集器到达时它被释放收集运行时可调用包装器,它是一个托管对象。尽管它是一个非托管 COM 对象的包装器,但 RCW 仍然是一个托管对象,并且关于“不要从终结器访问托管对象”的规则仍然应该适用。

0 投票
1 回答
1913 浏览

c# - win32_networkaddressconfiguration 没有ip地址

我正在从Win32_NetworkAdapterConfigurationC# 的类中收集所有网络适配器配置。我使用这个查询:

但是,在选择我用来连接到Internet的NetworkAdapter时,它就说,IPEnabled = false当我调用数组时IPAddresses,我得到了nullpointerexception(意味着array = null)。

我这样称呼地址:

eInterfacesConfig是 aManagementObjectCollection.Enumerator并且选择的是当前ManagementObject的枚举数。

我尝试将标签 (lblIP) 的文本更改为数组中的第一个 IP 地址。但这是引发异常的地方。

有人可以解释为什么,也许可以指出我正确的方向吗?

0 投票
1 回答
1491 浏览

c# - 在 Linux 上运行 Dot Net 项目 exe,它利用 System.Management 获取 USB 设备信息

嗨,我在 C# 中创建了一个 Dot Net 应用程序,以使用 System.Management 命名空间获取 USB 设备信息,如 DeviceID、Caption、ClassGUID 等。我正在使用 ManagementObjectSearcher 方法从 Win32_DiskDrive 获取值。它在 Windows 上运行良好。我想在 Linux 机器上运行它。您可以使用 Mono 在 Linux 机器上运行 Dot Net 应用程序。

http://mono-project.com/Main_Page

当我使用 Mono 在 Linux 上运行我的应用程序的 exe 时,我收到以下错误:

谁能帮我解决这个问题。我想知道如何使用 System.Management 命名空间在 Linux 机器上运行我的 Dot Net exe 来检索 USB 设备的信息

谢谢

0 投票
1 回答
576 浏览

vb.net - 文本框文本在 VB.NET 中不使用空格进行解析

我有一个将使用目录结构填充的文本框(例如,C:\Program Files\Visual Basic)。我正在尝试textbox.text在另一个变量中使用该对象,但是当路径包含空格时,信息将被切断。

这是使用路径填充文本框的违规代码:

请注意,它用于FolderBrowserDialog填充文本框,这部分工作正常。我有另一个按钮单击,然后textbox.text在我在其他地方定义的函数中使用特定文件名:

它永远无法解析文件名,例外是:

0 投票
1 回答
1914 浏览

c# - C# - Powershell AddPSSnapin 导致错误

所以,我导入System.Management.Automationdll 并尝试New-Mailbox使用参数运行命令

所以我使用:

这一切都很好,花花公子......但是当我去运行应用程序时,我得到以下信息: Cannot load Windows PowerShell snap-in Microsoft.Exchange.Management.PowerShell.E2010 because of the following error: The type initializer for 'Microsoft.Exchange.Data.Directory.Globals' threw an exception.

所以,我在网上做了一些研究,发现我需要从 to 更改Any CPUx86平台目标。

但是,当我这样做时,我得到一个HTTP Error 503. The service is unavailable.错误

我几乎肯定我必须将它作为 32 位进程运行,以便它可以使用管理单元(从其他阅读来看,管理单元似乎正在运行)

我确实将应用程序池更改Enable 32-bit ApplicationsTrue. 这是我得到错误的时候。

我读过其他帖子......但是,我不知道如何克服这个Service unavailable问题。

我尝试使用 x64 构建并获取Could not load file or assembly 'EmailAdminWeb2' or one of its dependencies. An attempt was made to load a program with an incorrect format.

0 投票
3 回答
6924 浏览

c# - 如何使用 C# 在 C# 中打印 pdf

我使用“进程”在 C# 应用程序中打印 pdf 文件。但我无法获得打印状态。我发现可以使用 System.management 和 System.printing 与打印机/队列交互。我做了很多试验 n 错误使用这两个命名空间,但无法打印文件。关于如何使用这些命名空间将 pdf 文档打印到打印机的任何示例?

0 投票
1 回答
622 浏览

c# - 用 C# 打印或不打印文档

我使用以下代码打印 pdf :

以下以获取打印机的状态:

并尝试以下监控打印队列:

我只想知道我使用(1)打印的文档是否成功打印!(2)nd 代码片段总是显示相同的属性 anme 和值。因此无法通知打印状态。(3)rd 代码片段总是监视队列一次并显示“0”作业数。

那么取回打印状态的实际方法是什么?