Newsgroup: it.comp.appl.access
Titolo: Killare processo con WMI

Ho utilizzato questo codice per killare tutti i database aperti:
For Each obj In GetObject("winmgmts:").ExecQuery("SELECT * FROM Win32_Process WHERE Name='MSACCESS.EXE'")
 obj.Terminate
Next
Funziona egregiamente ma mi sono accorto che rimangono in piedi tutti i file .ldb.
Questo può creare problemi? C'è una soluzione per evitare questo?
Sandrobi


Kill tuopath.ldb
-- 
_ _
Ciao
MAssimiliano Amendola            
www.accessgroup.it
Cisa - Conferenza Italiana per Sviluppatori Access
Info:  
www.donkarl.com/it

C'è una soluzione per evitare questo?
se chiudi brutalmente l'applicazione No.
Ciao
Giorgio

 ha scritto nel messaggio news:d8m2cs$ad7$1...@domitilla.aioe.org...

Altrimenti come faresti, da codice?
Sandrobi

 ha scritto nel messaggio
news:JGzre.2158$D7.4...@twister1.libero.it...

Sandrobi
Forse potresti spiegare cosa ti spinge a KILLARE un processo...!
Qualsiasi tentativo fatto di terminare un processo dall'esterno
sia con API che via WMI genera come ti ha evidenziato Giorgio
il medesimo problema.
Non che questo sia poi un problema, nel senso che il ricorso a
questo metodo deve nascere da un'esigenza particolare, non
dalla normale gestione.
In questo caso dopo aver KILLATO è corretto eliminare anche il file
LDB.
Se però può essere rivalutata l'azione di Terminazione facendo
considerazioni più complete.............
Ciao
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------

 
Ho tre database che si richiamano l'un l'altro e potrebbero essere o meno aperti contemporaneamente. 
Con una sola azione vorrei poterli chiudere tutti.
Sandrobi

 Sandrobi
Ma come li apri da un 4° Database...?
Hai valutato la possibilità di usare l'Automazione
di Access per Aprirli e di conseguenza la stessa
soluzione tecnica per chiuderli...?
Ciao
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Sandrobi
ma... forse c'è qualcosa di più semplice, al momento mi viene in mente
questa soluzione.
Copia il codice e incollalo in un modulo BAS ed esegui la Sub
ChiudiAccess(),
chiuderà (non terminerà) tutte le istanze lasciando aperta quella corrente
che provvederai tu a chiudere a fine ciclo.
Ciao Giorgio
-- 
Giorgio Rancati
[Office Access MVP]
----------------------
Option Compare Database
Option Explicit
Private Declare Function GetClassName Lib "user32" Alias _
        "GetClassNameA" (ByVal Hwnd As Long, _
         ByVal lpClassName As String, _
         ByVal MaxCount As Long) As Long
Private Declare Function FindWindow Lib "user32" _
        Alias "FindWindowA" _
        (ByVal lpClassName As Any, _
         ByVal lpWindowName As Any) As Long
Private Declare Function GetWindow Lib "user32" _
        (ByVal Hwnd As Long, _
         ByVal Cmd As Long) As Long
Private Const GW_HWNDNEXT = 2
Private Declare Function PostMessage _
        Lib "user32" Alias "PostMessageA" _
        (ByVal Hwnd As Long, _
         ByVal wMsg As Long, _
         ByVal wParam As Long, _
         ByVal lParam As Long) As Long
Private Const WM_CLOSE = &H10
Sub ChiudiAccess()
    Dim Hwnd As Long
    Hwnd = FindWindow(ByVal 0&, ByVal 0&)
    Do
       If Hwnd = 0 Then Exit Do
       If fn_GetClassName(Hwnd) = "Omain" And _
          Hwnd <> Application.hWndAccessApp Then
          PostMessage Hwnd, WM_CLOSE, 0, 0&
          DoEvents
          Hwnd = FindWindow(ByVal 0&, ByVal 0&)
       Else
          Hwnd = GetWindow(Hwnd, GW_HWNDNEXT)
       End If
    Loop
End Sub
Private Function fn_GetClassName(Hwnd As Long) As String
    Dim strBuffer As String
    Dim intCount As Integer
    strBuffer = String(254 - 1, 0)
    intCount = GetClassName(Hwnd, strBuffer, 255)
    If intCount > 0 Then
        fn_GetClassName = Left$(strBuffer, intCount)
    End If
End Function
-----------------------

 ha scritto nel messaggio news:d8osvh$ln3$1...@domitilla.aioe.org...

E' proprio quello che cercavo: chiudere tutte le applicazioni di Access eventualmente aperte e poi provvedo a chiudere quella corrente.
Ciao
Sandrobi