vbnet 进程监控,监控Acad开启的数量,并且添加到开机启动

1# 自定义函数,添加到注册表

复制代码
 1 Public Sub StartRunRegHKLM()
 2 
 3         REM HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ Microsoft \ Windows \ CurrentVersion \ Run
 4 
 5         Dim strName As String = Application.StartupPath + "\" + Application.ProductName + ".exe"
 6 
 7         Dim strNewName As String = System.IO.Path.GetFileNameWithoutExtension(strName)
 8         If Not System.IO.File.Exists(strName) Then Return
 9         Try
10             Dim Rkey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run", True)
11             If IsNothing(Rkey) Then
12                 Rkey = Microsoft.Win32.Registry.LocalMachine.CreateSubKey("SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run")
13                 Rkey.SetValue(strNewName, Chr(34) & strName & Chr(34)) '修改注册表,使程序开机时自动执行.
14             Else
15                 Rkey.SetValue(strNewName, Chr(34) & strName & Chr(34)) '修改注册表,使程序开机时自动执行。 
16             End If
17         Catch ex As Exception
18             MessageBox.Show(ex.Message, "StartRun") ' //MessageBox.Show(ex.Message);
19         End Try
20     End Sub
View Code
复制代码

 2# timer 事件中写入处理机制,不笔者限制ACAD程序最多运行2个

 

复制代码
 1 Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
 2         Dim listacad = CheckAppProcess("acad"), proAcad As Process
 3         If listacad.Count > 2 Then
 4             Me.Timer1.Stop()
 5             If MessageBox.Show("进程数量超过服务器的载荷!请排队等候", "AutoCAD 报告", MessageBoxButtons.OK, MessageBoxIcon.Warning) = DialogResult.OK Then
 6                 For index = listacad.Count - 1 To 2 Step -1
 7                     proAcad = listacad(index)
 8                     If Not proAcad.HasExited Then proAcad.Kill()
 9                 Next
10                 Me.Timer1.Start()
11             End If
12         End If
13     End Sub
View Code
复制代码

3# 读取进程的数量

 

复制代码
1 Public Function CheckAppProcess(appName As String) As List(Of Process)
2         Dim pros As Process() = Process.GetProcesses()
3         Dim processAcad As List(Of Process) = New List(Of Process)()
4         For Each p As Process In pros
5             If p.ProcessName = "acad" Then processAcad.Add(p)
6         Next
7         Return processAcad
8     End Function
View Code
复制代码

 4# 最后将相关的启动timer空间的语句写入到程序开始

 

复制代码
1  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
2         Me.Timer1.Interval = 3000
3         Me.Timer1.Start()
4     End Sub
View Code
复制代码

 

运行开机启动需要提权到管理员权限

https://www.cnblogs.com/zbfamily/p/6269335.html

posted @   南胜NanSheng  阅读(263)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示