Hej jag har ett VB-program som anropar ett annat program på lokala nätverket. En indata-fil skapas av VB-programmet som sedan läses av Console-programmet som ger utdata i annan fil. Snabbt tycker jag att det verkar som du skall använda ShellExecute för att öppna ditt prog. Hej Det är ju ganska meningslöst att försöka hjälpa dig i dom Eftersom du verkar exekvera console-programmet på klienten blir det hela lite svårare. En mutex hade annars gått att använda om programmet alltid exekverades på samma maskin. Du skulle kunna försöka öpna filen exclusivt. Kontrollera om du inte får göra det. I så fall körs programmet. Skriver bara en sak . Lycka till med allt "flummeri". :-D Om du av någon anledning har tillgång till en databas är det kanske möjligt att lösa grejen med transaktioner? Hej Niklas.Körs program? Använda semafor?
Hur kontrollerar jag att Console-programmet inte körs (kanske har hängt sig)? Utdata-filen får ej skrivas över förrän VB-programmet läst in den.
Någon med en fin lösning?Sv: Körs program? Använda semafor?
<code>
Private Declare Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" _
(ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
Const SW_SHOWNORMAL = 1
Private Sub Command1_Click()
Dim semafor As Long
semafor = ShellExecute(Me.hWnd, vbNullString, "filens namn", _
vbNullString, "sökväg till mappen(Dir)", SW_SHOWNORMAL)
If semafor = 0 Then MsgBox "trubble"
'eller en loop som ligger och väntar på Ok
'Do Until semafor <> 0
' DoEvents
'Loop
'Gör något
End Sub
</code>
<b>If the function succeeds,
the return value is the instance handle of the application that was run.</b>
Dvs får du en handler i retur så är det Ok Sv:Körs program? Använda semafor?
Jag glömde säga att jag redan använder följande kod för att anropa Console-programmet:
<code>
Dim wScr as Object
Set wScr = CreateObject("WScript.Shell")
Call wScr.Run("consoleprogram.exe", 1, true)
</code>
Jag väntar alltså tills det att programmet körts klart. VB-programmet exekverar inte vidare förrän Console-programmet körts klart.
För övrigt, vet någon hur jag programmatiskt stänger ner "consoleprogram.exe" efter ett antal sekunder? (om programmet skulle hänga sig)Sv: Körs program? Använda semafor?
olika trådarna du far omkring i hur man än svarar så låser
du dig i dina egna lösningar som inte funkar.
Skulle du kunna tänka dig att prova ShellExecute och lägga
en Do Loop som väntar på att ditt Script har kört färdigt.Sv: Körs program? Använda semafor?
Varför kan du inte låta 2 klienter köra programmet samtidigt?
Det enda sättet jag kan komma på är att skriva till en fil på en bestämd plats när programmet körs. Problemet är då att du inte får reda på om programmet hänger sig. Det tråkiga är att du inte kan använda dej av tidsstämplar då du inte vet om klockorna går lika på de olika klienterna. Det snyggaste sättet att lösa det är att skriva om console-programmet så att det hanterar felen korrekt och aldrig hänger sig :)
/JohanSv: Körs program? Använda semafor?
Sv:Körs program? Använda semafor?
LOLSv: Körs program? Använda semafor?
Sv:Körs program? Använda semafor?
Jo transaktioner är en säker och bra lösning.
Men tyvärr är det inget som jag har tillgång till.
Tack ändå