問題タブ [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.
c# - WMIクエリのみを使用して実際のアダプター情報を取得しますか?
WMIを使用していくつかのシステム情報を取得しようとしています
が、問題は、たとえばグラフィックカード情報を取得したい場合です..多くのドライバー(実および仮想)を取得します
結果は次の
とおりです
。Radmin
ミラードライバーv3ATIMobility
Radeon
HD5650LogMeIn
ミラードライバー
PCIGDIHOOK5
そのため、クエリを編集して実際のクエリのみを取得することにしました。この場合、実際のクエリにはnullと等しくないAdapterRamが必要です。
結果は次のとおりです
。ATIMobilityRadeonHD5650
バイト数
WMIで実際のアダプターのみを取得するためのより良い一般的な方法はありますか?
clrstoredprocedure - System.management dll の場所
IBM WebSphere MQ dll を参照する SQL CLR ストアード・プロシージャーを構築しようとしています。仕事用のマシンでこれを行うのに問題があるため、ローカルホストを使用して自宅のコンプでこれを動作させることができるかどうかを確認することにしました。別のエラーが発生することはありましたが、system.management dll がどこにあるのかわかりません...
エラーメッセージのコピーは次のとおりです。
メッセージ 10301、レベル 16、状態 1、行 1 アセンブリ 'amqmdnet' は、現在のデータベースに存在しないアセンブリ 'system.management, version=2.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a.' を参照しています。SQL Server は、アセンブリの参照元と同じ場所から参照アセンブリを見つけて自動的に読み込もうとしましたが、その操作は失敗しました (理由: 2 (指定されたファイルが見つかりません))。参照されているアセンブリを現在のデータベースに読み込み、要求を再試行してください。
c# - Get-WMIObjectは、昇格されたPowerShellでWin32_LogicalDiskToPartiionを列挙できません
私は本当に単純なPowershellクエリを持っています:
Windows 7(64ビット)マシンでは、これをPowershellで実行すると、単一の管理オブジェクトが正しく列挙されます。ただし、昇格したPowershellで同じクエリを実行すると、一時停止が長くなり、結果が得られません。
コードでWMIクエリを実行しようとすると(実際に実行しようとしていることです)、同様の問題が見つかります。プログラムを標高なしで実行すると、コードは機能し、標高付きで実行しても結果は返されません。これは、この問題を示す私のコードの最も単純なバージョンです。
なぜこれが起こるのですか?さらに重要なのは、とにかく、昇格して実行したときにこのクエリが正しく実行されることを保証できることです。最終的なプログラムは他の理由で昇格して実行する必要があるためです。
c# - MSTest 中のファイナライザーでの NullReferenceException
(これはとてつもなく長い質問です。これまでの調査から質問を分離しようとしたので、少し読みやすくなりました。)
MSTest.exe を使用して単体テストを実行しています。ときどき、次のテスト エラーが表示されます。
個別の単体テスト方法について: 「テストの実行中にエージェント プロセスが停止しました。」
テスト実行全体で:
それで、ここで私がしなければならないと思うことは次のとおりです。MetaDataInfo でエラーの原因を追跡する必要がありますが、空白を描画しています。私の単体テスト スイートの実行には 30 分以上かかり、エラーは毎回発生するわけではないため、再現するのは困難です。
単体テストの実行でこの種の失敗を見た人はいますか? 特定のコンポーネントまで追跡できましたか?
編集:
テスト対象のコードは、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 クラスのすべての使用法を見つけることができました。(これは内部クラスなので、アセンブリを検索するだけで完全なリストになるはずです。) 使用される場所は 1 つだけです。
MetaDataInfo のすべての使用は適切に Disposed されているため、次のようになります。
- MetaDataInfo.importInterface が null でない場合:
- 静的メソッド GetMvid は MetaDataInfo.Mvid を返します
using
呼び出し MetaDataInfo.Dispose- COM オブジェクトのリークを破棄する
- Dispose は importInterface を null に設定します
- 呼び出しを破棄する GC.SuppressFinalize
- その後、GC が MetaDataInfo を収集するときに、ファイナライザーはスキップされます。
- .
- MetaDataInfo.importInterface が null の場合:
- 静的メソッド GetMvid は、MetaDataInfo.Mvid を呼び出す NullReferenceException を取得します。
- 例外が伝播する前に、
using
呼び出し MetaDataInfo.Dispose- 呼び出しを破棄する Marshal.ReleaseComObject
- Marshal.ReleaseComObject は NullReferenceException をスローします。
- 例外がスローされるため、Dispose は GC.SuppressFinalize を呼び出しません。
- 呼び出しを破棄する Marshal.ReleaseComObject
- 例外は、GetMvid の呼び出し元まで伝播します。
- その後、GC が MetaDataInfo を収集すると、Finalizer が実行されます。
- 通話を終了する
- 呼び出しを破棄する Marshal.ReleaseComObject
- Marshal.ReleaseComObject は NullReferenceException をスローし、それが GC まで伝搬され、アプリケーションが終了します。
- 呼び出しを破棄する Marshal.ReleaseComObject
- 通話を終了する
参考までに、MetaDataInfo の残りの関連コードを次に示します。
編集2:
Microsoft の MetaDataInfo クラスでバグを再現できました。ただし、私の再現は、ここで見ている問題とは少し異なります。
- 再現: マネージ アセンブリではないファイルに MetaDataInfo オブジェクトを作成しようとしました。これは、初期化される前にコンストラクターから例外をスローし
importInterface
ます。 - MSTest に関する私の問題: MetaDataInfo は一部のマネージド アセンブリで構築されており、何かが発生して
importInterface
null になったり、コンストラクターimportInterface
が初期化される前に終了したりします。- MetaDataInfo は内部クラスであり、それを呼び出す唯一の API はAssembly.Locationの結果を渡すことにより、MetaDataInfo がマネージド アセンブリで作成されることを知っています。
ただし、Visual Studio で問題を再現すると、ソースが MetaDataInfo にダウンロードされました。元の開発者のコメントを含む実際のコードを次に示します。
元のコードは、リフレクターで見られたものを確認します。if ステートメントは逆であり、Finalizer からマネージド オブジェクトにアクセスするべきではありません。
を呼び出すことはなかったのでReleaseComObject
、COMオブジェクトをリークしていると前に言いました。.Net での COM オブジェクトの使用について詳しく調べましたが、それを正しく理解していれば、それは正しくありませんでした。COM オブジェクトは、Dispose() が呼び出されたときに解放されませんが、ガベージ コレクターがアクセスしたときに解放されます。管理対象オブジェクトであるランタイム呼び出し可能ラッパーを収集します。アンマネージ COM オブジェクトのラッパーですが、RCW は依然としてマネージ オブジェクトであり、「ファイナライザからマネージ オブジェクトにアクセスしない」という規則が引き続き適用されます。
c# - win32_networkaddressconfiguration IP アドレスなし
Win32_NetworkAdapterConfiguration
C#のクラスからすべての networkadapterconfigurations を収集しています。私はこのクエリを使用します:
ただし、インターネットへの接続に使用する networkadapter を選択するとIPEnabled = false
、 で配列を呼び出すと、IPAddresses
nullpointerexception が発生します (配列 = null を意味します)。
私は次のようにアドレスを呼び出します。
eInterfacesConfig
は でありManagementObjectCollection.Enumerator
、choosen はManagementObject
列挙子からの電流です。
ラベル (lblIP) のテキストを配列の最初の IP アドレスに変更しようとしています。しかし、これは例外がスローされる場所です。
誰かが理由を説明し、おそらく私を正しい方向に向けることができますか?
c# - System.Management を使用して USB デバイス情報を取得する Linux でドット ネット プロジェクト exe を実行する
こんにちは、C# で Dot Net アプリケーションを作成し、System.Management 名前空間を使用して DeviceID、Caption、ClassGUID などの USB デバイス情報を取得しました。ManagementObjectSearcher メソッドを使用して、Win32_DiskDrive から値を取得しています。Windowsで問題なく動作しています。Linuxマシンで実行したい。Mono を使用して、Linux マシンで Dot Net アプリケーションを実行できます。
http://mono-project.com/Main_PageMono を使用して Linux でアプリケーションの exe を実行すると、次のエラーが発生します。
誰でもこの問題を解決するのを手伝ってくれますか? System.Management 名前空間を使用して Linux マシンで Dot Net exe を実行し、USB デバイスの情報を取得する方法を知りたいと思いました。
ありがとう
c# - C# - Powershell AddPSSnapin でエラーが発生する
だから、私はdllをインポートし、paramsでコマンドSystem.Management.Automation
を実行しようとしています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.
そこで、オンラインで調査を行ったところ、プラットフォーム ターゲットを からAny CPU
に変更する必要があることがわかりました。x86
ただし、それを行うとHTTP Error 503. The service is unavailable.
エラーが発生します
スナップインを使用できるように、32ビットプロセスとして実行する必要があることはほぼ確実です(他の読み取りからは、スナップインが実行されているようです)
アプリプールをEnable 32-bit Applications
に変更しましたTrue
。エラーが発生したときです。
私は他の投稿を読みました...しかし、私はこの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.
c# - を使用して C# で PDF を印刷する方法
C# アプリで 'process' を使用して pdf ファイルを印刷しました。しかし、印刷ステータスを取得できません。System.management と System.printing を使用して、プリンター/キューと対話できることがわかりました。試行錯誤を繰り返しました。これらの2つの名前空間を使用していますが、ファイルを印刷できませんでした.これらを使用してpdfドキュメントをプリンターに印刷する方法の例はありますか?