C#使用WMI獲取控制面板中安裝的所有程序列表

C#使用WMI獲取控制面板中安裝的所有程序列表

WMI

全稱Windows Management Instrumentation,Windows Management Instrumentation是Windows中用于提供共同的界面和對象模式以便訪問有關操作系統、設備、應用程序和服務的管理信息。如果此服務被終止,多數基于 Windows 的軟件將無法正常運行。如果此服務被禁用,任何依賴它的服務將無法啟動。
WMI提供公用接口及對象模型,以存取有關操作系統、裝置、應用程序及服務的管理信息。

新建窗體應用程序WindowsManagementDemo,將默認的Form1重命名為FormWMI,

添加引用System.Management,如下圖:

窗體FormWMI設計器代碼如下:

文件FormWMI.Designer.cs


namespace WindowsManagementDemo
{partial class FormWMI{/// <summary>/// 必需的設計器變量。/// </summary>private System.ComponentModel.IContainer components = null;/// <summary>/// 清理所有正在使用的資源。/// </summary>/// <param name="disposing">如果應釋放托管資源,為 true;否則為 false。</param>protected override void Dispose(bool disposing){if (disposing && (components != null)){components.Dispose();}base.Dispose(disposing);}#region Windows 窗體設計器生成的代碼/// <summary>/// 設計器支持所需的方法 - 不要修改/// 使用代碼編輯器修改此方法的內容。/// </summary>private void InitializeComponent(){this.dgvWMI = new System.Windows.Forms.DataGridView();this.rtxtMessage = new System.Windows.Forms.RichTextBox();this.Column6 = new System.Windows.Forms.DataGridViewTextBoxColumn();this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn();this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn();this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn();this.Column4 = new System.Windows.Forms.DataGridViewTextBoxColumn();this.Column5 = new System.Windows.Forms.DataGridViewTextBoxColumn();((System.ComponentModel.ISupportInitialize)(this.dgvWMI)).BeginInit();this.SuspendLayout();// // dgvWMI// this.dgvWMI.AllowUserToAddRows = false;this.dgvWMI.AllowUserToDeleteRows = false;this.dgvWMI.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;this.dgvWMI.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {this.Column6,this.Column1,this.Column2,this.Column3,this.Column4,this.Column5});this.dgvWMI.Location = new System.Drawing.Point(12, 12);this.dgvWMI.MultiSelect = false;this.dgvWMI.Name = "dgvWMI";this.dgvWMI.ReadOnly = true;this.dgvWMI.RowHeadersWidth = 25;this.dgvWMI.RowTemplate.Height = 23;this.dgvWMI.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;this.dgvWMI.Size = new System.Drawing.Size(1084, 363);this.dgvWMI.TabIndex = 0;// // rtxtMessage// this.rtxtMessage.Location = new System.Drawing.Point(12, 381);this.rtxtMessage.Name = "rtxtMessage";this.rtxtMessage.ReadOnly = true;this.rtxtMessage.Size = new System.Drawing.Size(1084, 395);this.rtxtMessage.TabIndex = 1;this.rtxtMessage.Text = "";// // Column6// this.Column6.HeaderText = "序號";this.Column6.Name = "Column6";this.Column6.ReadOnly = true;this.Column6.Width = 80;// // Column1// this.Column1.HeaderText = "名稱";this.Column1.Name = "Column1";this.Column1.ReadOnly = true;this.Column1.Width = 370;// // Column2// this.Column2.HeaderText = "發布者";this.Column2.Name = "Column2";this.Column2.ReadOnly = true;this.Column2.Width = 200;// // Column3// this.Column3.HeaderText = "安裝時間";this.Column3.Name = "Column3";this.Column3.ReadOnly = true;// // Column4// this.Column4.HeaderText = "安裝路徑";this.Column4.Name = "Column4";this.Column4.ReadOnly = true;this.Column4.Width = 180;// // Column5// this.Column5.HeaderText = "版本";this.Column5.Name = "Column5";this.Column5.ReadOnly = true;this.Column5.Width = 120;// // FormWMI// this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;this.ClientSize = new System.Drawing.Size(1108, 788);this.Controls.Add(this.rtxtMessage);this.Controls.Add(this.dgvWMI);this.Name = "FormWMI";this.Text = "WMI(Windows Management Instrumentation)用于提供共同的界面和對象模式以便訪問有關操作系統、設備、應用程序和服務的管理信息";this.Load += new System.EventHandler(this.FormWMI_Load);((System.ComponentModel.ISupportInitialize)(this.dgvWMI)).EndInit();this.ResumeLayout(false);}#endregionprivate System.Windows.Forms.DataGridView dgvWMI;private System.Windows.Forms.RichTextBox rtxtMessage;private System.Windows.Forms.DataGridViewTextBoxColumn Column6;private System.Windows.Forms.DataGridViewTextBoxColumn Column1;private System.Windows.Forms.DataGridViewTextBoxColumn Column2;private System.Windows.Forms.DataGridViewTextBoxColumn Column3;private System.Windows.Forms.DataGridViewTextBoxColumn Column4;private System.Windows.Forms.DataGridViewTextBoxColumn Column5;}
}

窗體FormWMI代碼如下

文件FormWMI.cs.

[因讀取程序遍歷數據過多,這里使用等待任務await Task]

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Management;namespace WindowsManagementDemo
{public partial class FormWMI : Form{public FormWMI(){InitializeComponent();/** 使用WMI,需要添加System.Management的引用* 在C#中,可以使用Windows Management Instrumentation (WMI) 來獲取控制面板中安裝的所有程序列表。* 以下是一個簡單的示例代碼,展示了如何使用WMI查詢獲取這些信息:* Windows Management Instrumentation是Windows中用于提供共同的界面和對象模式以便訪問有關操作系統、設備、應用程序和服務的管理信息。* 如果此服務被終止,多數基于 Windows 的軟件將無法正常運行。如果此服務被禁用,任何依賴它的服務將無法啟動。* WMI提供公用接口及對象模型,以存取有關操作系統、裝置、應用程序及服務的管理信息。*/dgvWMI.Rows.Clear();}/// <summary>/// 異步顯示文本內容/// </summary>/// <param name="message"></param>private void DisplayMessage(string message) {if (!IsHandleCreated) {return;}this.BeginInvoke(new Action(() => {if (rtxtMessage.TextLength >= 40960) {rtxtMessage.Clear();}rtxtMessage.AppendText($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}->{message}\n");rtxtMessage.ScrollToCaret();}));}private async void FormWMI_Load(object sender, EventArgs e){await Task.Run(() => {ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Product");ManagementObjectCollection managementCollection = searcher.Get();DisplayMessage("累計個數:" + managementCollection.Count);int sequence = 0;int tempIndex = 0;foreach (ManagementBaseObject install in managementCollection){sequence++;this.BeginInvoke(new Action(() =>{tempIndex++;dgvWMI.Rows.Add(tempIndex, install["Name"], install["Vendor"], install["InstallDate"], install["InstallLocation"], install["Version"]);                        }));PropertyDataCollection Properties = install.Properties;DisplayMessage($"【{sequence.ToString("D3")}】{install["Name"]}:屬性鍵值對個數:{install.Properties.Count}");foreach (PropertyData propertyData in Properties){DisplayMessage($"\x20\x20Name:{propertyData.Name},Value:{propertyData.Value},Type:{propertyData.Type}");}}});}}
}

運行如圖:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/66571.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66571.shtml
英文地址,請注明出處:http://en.pswp.cn/web/66571.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

風光并網對電網電能質量影響的matlab/simulink仿真建模

這個課題早在一幾年的時候比較熱門&#xff0c;之前作電科院配電網的一個項目中也有所涉及&#xff0c;我把其中一部分經典仿真模型思路分享給大家&#xff0c;電能質量影響這部分&#xff0c;我在模型中主要體現的就是不同容量的光伏、風電接入&#xff0c;對并網點的電壓影響…

Ubuntu 24.04 LTS linux 文件權限

Ubuntu 24.04 LTS 文件權限 讀權限 &#xff1a;允許查看文件的內容。寫權限 (w)&#xff1a;允許修改文件的內容。執行權限 (x)&#xff1a;允許執行文件&#xff08;對于目錄來說&#xff0c;是進入目錄的權限&#xff09;。 文件權限通常與三類用戶相關聯&#xff1a; 文…

第13章:Python TDD完善貨幣加法運算(二)

寫在前面 這本書是我們老板推薦過的&#xff0c;我在《價值心法》的推薦書單里也看到了它。用了一段時間 Cursor 軟件后&#xff0c;我突然思考&#xff0c;對于測試開發工程師來說&#xff0c;什么才更有價值呢&#xff1f;如何讓 AI 工具更好地輔助自己寫代碼&#xff0c;或許…

.Net Core微服務入門全紀錄(六)——EventBus-事件總線

系列文章目錄 1、.Net Core微服務入門系列&#xff08;一&#xff09;——項目搭建 2、.Net Core微服務入門全紀錄&#xff08;二&#xff09;——Consul-服務注冊與發現&#xff08;上&#xff09; 3、.Net Core微服務入門全紀錄&#xff08;三&#xff09;——Consul-服務注…

C#防止重復提交

C#防止重復提交 文章目錄 C#防止重復提交前言防止重復提交的思路Web API 防止重復提交代碼實現代碼講解使用方法 MVC防止重復提交總結 前言 當用戶在前端進行提交數據時&#xff0c;如果網絡出現卡頓和前端沒有給出響應的話顧客通常都會狂點提交按鈕&#xff0c;這樣就很容易導…

python學opencv|讀取圖像(三十九 )閾值處理Otsu方法

【1】引言 前序學習了5種閾值處理方法&#xff0c;包括(反)閾值處理、(反)零值處理和截斷處理&#xff0c;還學習了一種自適應處理方法&#xff0c;相關文章鏈接為&#xff1a; python學opencv|讀取圖像&#xff08;三十三&#xff09;閾值處理-灰度圖像-CSDN博客 python學o…

嵌入式硬件篇---PID控制

文章目錄 前言第一部分&#xff1a;連續PID1.比例&#xff08;Proportional&#xff0c;P&#xff09;控制2.積分&#xff08;Integral&#xff0c;I&#xff09;控制3.微分&#xff08;Derivative&#xff0c;D&#xff09;控制4.PID的工作原理5..實質6.分析7.各種PID控制器P控…

日志收集Day001

1.ElasticSearch 作用&#xff1a;日志存儲和檢索 2.單點部署Elasticsearch與基礎配置 rpm -ivh elasticsearch-7.17.5-x86_64.rpm 查看配置文件yy /etc/elasticsearch/elasticsearch.yml&#xff08;這里yy做了別名&#xff0c;過濾掉空行和注釋行&#xff09; yy /etc/el…

集合帖:前綴和及差分模板題 ← 一維及二維

【一維前綴和及一維差分知識點】 ● 一維“前綴和數組”預處理過程&#xff1a;cin>>a[i], sum[i]sum[i-1]a[i] 或者 cin>>sum[i], sum[i]sum[i-1] &#xff08;1≤i≤n&#xff09; ● 一維“區間和”計算過程&#xff1a;sum[y]-sum[x-1] &#xff08;y…

《offer 來了:Java 面試核心知識點精講 -- 框架篇》(附資源)

繼上篇文章介紹了《offer 來了&#xff1a;Java 面試核心知識點精講 -- 原理篇》書后&#xff0c;本文章再給大家推薦兄弟篇 《offer來了&#xff1a;Java面試核心知識點精講--框架篇》&#xff0c; 簡直就是為Java開發者量身定制的面試神器。 本書是對Java程序員面試中常見的…

Low-Level 大一統:如何使用Diffusion Models完成視頻超分、去雨、去霧、降噪等所有Low-Level 任務?

Diffusion Models專欄文章匯總:入門與實戰 前言:視頻在傳輸過程中常常因為各種因素(如惡劣天氣、噪聲、壓縮和傳感器分辨率限制)而出現質量下降,這會嚴重影響計算機視覺任務(如目標檢測和視頻監控)的性能。現有的視頻修復方法雖然取得了一些進展,但通常只能針對特定的退…

Video-RAG:一種將視頻RAG新框架

1. 摘要及主要貢獻點 摘要&#xff1a; 檢索增強生成&#xff08;RAG&#xff09;是一種強大的策略&#xff0c;通過檢索與查詢相關的外部知識并將其整合到生成過程中&#xff0c;以解決基礎模型生成事實性錯誤輸出的問題。然而&#xff0c;現有的RAG方法主要集中于文本信息&…

Docker Load后存儲的鏡像及更改鏡像存儲目錄的方法

Docker Load后存儲的鏡像及更改鏡像存儲目錄的方法 Docker Load后存儲的鏡像更改鏡像存儲目錄的方法腳本說明注意事項Docker作為一種開源的應用容器引擎,已經廣泛應用于軟件開發、測試和生產環境中。通過Docker,開發者可以將應用打包成鏡像,輕松地進行分發和運行。而在某些場…

【零基礎入門unity游戲開發——unity通用篇37】鼠標指針(光標)修改隱藏鎖定(基于unity6開發介紹)

考慮到每個人基礎可能不一樣,且并不是所有人都有同時做2D、3D開發的需求,所以我把 【零基礎入門unity游戲開發】 分為成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要講解C#的基礎語法,包括變量、數據類型、運算符、流程控制、面向對象等,適合沒有編程基礎的…

親測解決Latex File ended while scanning use of \@@BOOKMARK

這個問題只要刪除了.tex后綴文件外的其他同名文件&#xff0c;再次編譯即可。 環境 Win11 MikTex 問題原因 編譯的時候用了好幾種編譯器&#xff0c;然后編譯出現了錯誤。生成了不能使用的引用。 解決方法 刪除.tex后綴文件外的其他同名文件后&#xff0c;再次編譯。 筆…

Amazon MSK 開啟 Public 訪問 SASL 配置的方法

1. 開啟 MSK Public 1.1 配置 MSK 參數 進入 MSK 控制臺頁面&#xff0c;點擊左側菜單 Cluster configuration。選擇已有配置&#xff0c;或者創建新配置。在配置中添加參數 allow.everyone.if.no.acl.foundfalse修改集群配置&#xff0c;選擇到新添加的配置。 1.2 開啟 Pu…

Windows FileZila Server共享電腦文件夾 映射21端口外網連接

我有這樣一個使用場景&#xff0c;在外部網絡環境下&#xff0c;通過手機便捷地讀取存儲在電腦上的視頻文件。比如在外出旅行、出差&#xff0c;身邊沒有攜帶電腦&#xff0c;僅依靠手機設備&#xff0c;就能隨時獲取電腦里存儲的各類視頻&#xff0c;無論是學習資料視頻、工作…

MySQL 實戰 4 種將數據同步到ES方案

文章目錄 1. 前言2. 數據同步方案 2.1 同步雙寫2.2 異步雙寫2.3 定時更新2.4 基于 Binlog 實時同步 3. 數據遷移工具選型 3.1 Canal3.2 阿里云 DTS3.3 Databus3.4 Databus和Canal對比3.4 其它 4. 后記 上周聽到公司新同事分享 MySQL 同步數據到 ES 的方案&#xff0c;發現很有…

虛幻基礎-1:cpu挑選(14600kf)

能幫到你的話&#xff0c;就給個贊吧 &#x1f618; 文章目錄 ue非常吃cpu拉滿主頻打開項目編寫藍圖運行原因 時間長 關于壓力測試 本文以14600kf為例&#xff0c;雙12購入&#xff0c;7月份產。 ue非常吃cpu 經本人測試&#xff0c;ue是非常吃cpu的。 拉滿主頻 無論任何時間…

QTableWidget的簡單使用

1.最簡單的表格示例&#xff1a; ui->tableWidget->setRowCount(2);// 設置行數ui->tableWidget->setColumnCount(3);// 設置列數&#xff0c;一定要放在設置行表頭之前QStringList rowHeaderList;// 行表頭rowHeaderList << QStringLiteral("姓名"…