http://www.serverobjects.com/comp/aspproc.zip
AspProc is a component that will
Return a variant array of process id's and process names
Terminate a particular process by process ID
11 svar · 930 visningar · startad av nisslass
Hej!
Jag har en ganska avancerad fråga. Tror jag.
Jag vill kunna starta ett program på en Windows XP Pro-dator som kör IIS 5. (Eller vilken version det nu är som man får med)
Jag har inga problem att starta programmet i fråga via Wscript.Shell.
Grejen är att programmet inte syns utan blir dolt. Det startar som det ska (man ser processen i aktivitetshanteraren) men det syns inte.
Hur får jag det att synas på datorn som programmet startar på?
Jag vill även kunna avsluta programmen jag just startade.
Det måste väl på något sätt gå att få fram process-id när programmet startas, spara detta i en databas (mySQL i det här fallet) och sen när man så önskar, stänga detta process-id. Grejen är att jag vill starta samma program flera gånger så det går inte att bara söka på filnamnet bland alla processer då det kommer förekomma fler än en gång.
Någon som har en smart lösning?
http://www.serverobjects.com/comp/aspproc.zip
AspProc is a component that will
Return a variant array of process id's and process names
Terminate a particular process by process ID
En krona på HLDS.
Jesper T skrev:
http://www.serverobjects.com/comp/aspproc.zip
AspProc is a component that will
Return a variant array of process id's and process names
Terminate a particular process by process ID
Grejen är att alla processer inte visas när jag testar med den komponenten.
Jag ser EN process. Jag kan heller inte se vilket id en process får när jag startar den med hjälp av ovanstående.
Och ja, det gäller HLDS. Jag har redan ett fullt fungerande system men jag önskar kunna starta om alla våra servrar via ASP på process-nivå.
Jag tror nästan jag vet vem du är.
Ekström skrev:
Jag tror nästan jag vet vem du är.
haha.. Du har så rätt Jocke.
Nicke här vet du.
Försöker hitta lösning så ni själva kan starta om servern osv via webben. :)
Låter suveränt.
Att starta en process och få ut id på den är inte specielt svårt det kan du lösa med wmi - likadant med nedstängningen, problemet är nog att programet blir dolt, dock inte processen. Ska försöka återkomma med kod-exempel under morgondagen. :)
Jag lyckades faktiskt lösa det. Dock via PHP där det redan fanns färdiga script för att hantera PsTools (http://www.sysinternals.com/Utilities/PsTools.html).
Nu kan jag via asp anropa php-script som stänger av program om jag skickar PID till filen.
Jag kan även starta program. PHP-scriptet returnerar då ett PID tillbaka till ASP-scriptet i klartext.
Jag kan även se status på programmet. Om processen är igång eller inte genom att skicka vidare ett PID till PHP-scriptet.
PHP-scriptet returnerar då 0 eller 1.
Okej, då vill du alltså inte ha mitt vb-script med wmi? :e
colione skrev:
Okej, då vill du alltså inte ha mitt vb-script med wmi? :e
Jodå, det kan vara intressant att se. :)
Jag har skrivt detta i aspekten från en vbs-fil iom att jag inte har tillgång att köra asp på min arbetsdator... ;)
Men det är ju hyffsat lätt att modda till :)
Skapa:
Option Explicit
'*******************************************************
'Objekt
'*******************************************************
Dim objProcess, objWMIService, colSWbemObjectSet, Process, colProcess
'*******************************************************
'Strängar
'*******************************************************
Dim strComputer
'*******************************************************
'Nummer
'*******************************************************
Dim intProcessID
'*******************************************************
'arrayer
'*******************************************************
Dim arrProcesser
arrProcesser = Array("c:\windows\system32\notepad.exe","calc") 'ange processnamnen med sökväg, miljövariablar kan tyvärr inte användas, du kan även skriva som du gör i run
strComputer = "." ' . innebär aktuell dator i WMI
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2:Win32_Process") ' Skapa wmi-connection
Set colSWbemObjectSet = objWMIService.Methods_("Create")' då dokumentationsexmplen för process-skapning inte funkar får vi använda en alternativ metod
Set objProcess = colSWbemObjectSet.inParameters.SpawnInstance_()
objProcess.CurrentDirectory = "c:\temp" ' i vilken mapp ska programmet köras?
For each Process in arrProcesser
objProcess.CommandLine = Process
Set colProcess = objWMIService.ExecMethod_("Create", objProcess)
intProcessID= intProcessID&" "&colProcess.Properties_.Item("ProcessId").Value
next
msgbox intProcessID
Stänga:
Option Explicit
'*******************************************************
'Objekt
'*******************************************************
Dim objProcess, objWMIService, colSWbemObjectSet, Process, colProcess, objSWbemObject
'*******************************************************
'Strängar
'*******************************************************
Dim strComputer
'*******************************************************
'Nummer
'*******************************************************
Dim intProcessID
'*******************************************************
'arrayer
'*******************************************************
Dim arrProcesserid
arrProcesserid = Array(3976,1528) 'Process-id :)
strComputer = "." ' . innebär aktuell dator i WMI
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2") ' Skapa wmi-connection
Set colSWbemObjectSet = objWMIService.InstancesOf("Win32_Process") 'Vi löser nedstängningen på ett lite annorlunda sätt än starten
'Nedanstående är inte optimalt men WQL-satsen som man använder kan strula ibland. jag ska kasta ihop ett exempel med en sådan också för att visa. :) men det kommer senare
For Each intProcessID In arrProcesserid
For Each objSWbemObject In colSWbemObjectSet
if objSWbemObject.ProcessId = intProcessID Then
objSWbemObject.Terminate()
end if
Next
Next
Som sagt, skrivna i synpunkt att köras lokalt från en vbs-fil...men ganska lätt modat.. :)
Programmet syns även när man kör detta..wmi kan även köras remote mot en annan dator, då syns dock inte programmet som körs, detta är ur säkerhets-aspekt från MS sida.