Мне нужно идентифицировать текущий идентификатор процесса Excel, чтобы я мог сравнить его с другим идентификатором процесса Excel, чтобы я мог удалить другие нетекстовые процессы Excel. Вот что я имею, но ни один из процессов ids = текущий id. Что я делаю не так?Идентификация текущего процесса работы
Declare Function GetCurrentProcessId Lib "kernel32"() As Int32
Private Sub CheckMemory()
Dim process As Process
Dim xlProcessCount = process.GetProcessesByName("EXCEL").Count()
Dim curProc As IntPtr = GetCurrentProcessId()
Dim currentProcess As Process = process.GetProcessById(curProc)
If xlProcessCount > 1 Then
' MsgBox("There are " + xlProcessCount + "Excel processes running", MsgBoxStyle.Information)
'Associate the current active "Excel.exe" process with this application instance
'and delete the other running processes
Dim current = process.GetCurrentProcess()
For Each process In process.GetProcessesByName("EXCEL")
If process.Id <> currentProcess.Id Then
MsgBox("Deleting a previous running Excel process", MsgBoxStyle.Information)
process.Kill()
' releaseObject(xlApp)
' releaseObject(xlWb)
' releaseObject(xlWs)
End If
Next
End If
Похоже, что мы прошли половину пути, когда все пошло не так, и вы порождаете несколько процессов Excel и просачиваете их, и вы решили, что правильный способ исправить это - позволить утечке продолжить но старайтесь постоянно ее вытирать. Если это не так, можете ли вы объяснить, что такое «текущий активный» экземпляр excel, почему он особенный, и вообще то, что вы пытаетесь сделать. –
Ваш текущий код работает в Excel через VSTO или что-то подобное? – shf301
«В настоящее время работает» не имеет значения, все эти экземпляры excel.exe точно так же, как и в настоящее время. COM не предоставляет механизм для идентификации сервера. GetCurrentProcessId(), безусловно, не будет работать, это ваш процесс и никогда не Excel. Написание кода, подобного этому, представляет собой бандаж для другой проблемы. Теперь у вас есть две проблемы. –