Toon posts:

[vb] Shell werkt wel in IDE maar niet in EXE

Pagina: 1
Acties:
  • 104 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb een heel vreeemd probleem. In mijn programma roep ik een .bat-bestand aan met de volgende code:
code:
1
ShellAndWait "ps2pdf.bat view1.ps view1.pdf", vbMinimizedNoFocus

Hieronder de functie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
    ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Public Sub ShellAndWait(ByVal strProg As String, ByVal lStyle As VbAppWinStyle)
    Dim ProcessId As Long
    Dim ProcessHandle As Long
    Const Access As Long = &H100000
    ProcessId = Shell(strProg, lStyle)
    Do
      ProcessHandle = OpenProcess(Access, False, ProcessId)
      If ProcessHandle <> 0 Then
        CloseHandle ProcessHandle
      End If
      DoEvents
    Loop Until ProcessHandle = 0
End Sub '--- ShellAndWait

Dit werkt allemaal heel mooi zolang ik maar draai onder de Visual Basic-omgeving. Compileer ik hem tot een executable dan doet hij het niet meer. Dan start hij alleen een leeg dos-scherm.

Maar wat nog vreemder is, als ik een nieuw project maak en daar deze code in plak dan doet die het wel, ook als executable.

Snapt iemand wat hier eventueel aan de hand kan zijn :?

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 14-09 17:42

Gerco

Professional Newbie

Is het mogelijk dat je executable in de verkeerde dit probeert te starten? En dat dus het batchfile niet gevonden wordt?

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Topicstarter
ok, om precieser te zijn staat er inplaats van de .bat .ps en .pdf bestanden ook het hele (correcte) path-genoemd inclusief quotes voor de eventuele spaties.

Verwijderd

Topicstarter
Het probleem is nog vager geworden, ik heb nu ontdekt dat de executable in de ene directory het wel doet en in de andere niet. Ik heb al naar (bijna) alle verschillen in de 2 directories gekeken, maar nog niets kunnen vinden |:(
Kan het misschien aan de directory naam komen :? Het ligt zeker niet aan de eventuele spaties dat heb ik al getest.

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 13-09 23:09

Skinny

DIRECT!

Zelf gebruik ik altijd de oplossing die hier :

http://support.microsoft.com/support/kb/articles/Q129/7/96.ASP

beschreven staat om progjes te runnen en te wachten tot ze klaar zijn. Dit werkt ook met BAT files perfect hier.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Private Type STARTUPINFO
    cb As Long
    lpReserved As String
    lpDesktop As String
    lpTitle As String
    dwX As Long
    dwY As Long
    dwXSize As Long
    dwYSize As Long
    dwXCountChars As Long
    dwYCountChars As Long
    dwFillAttribute As Long
    dwFlags As Long
    wShowWindow As Integer
    cbReserved2 As Integer
    lpReserved2 As Long
    hStdInput As Long
    hStdOutput As Long
    hStdError As Long
   End Type

   Private Type PROCESS_INFORMATION
    hProcess As Long
    hThread As Long
    dwProcessID As Long
    dwThreadID As Long
   End Type

   Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal _
    hHandle As Long, ByVal dwMilliseconds As Long) As Long

   Private Declare Function CreateProcessA Lib "kernel32" (ByVal _
    lpApplicationName As String, ByVal lpCommandLine As String, ByVal _
    lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
    ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
    ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As String, _
    lpStartupInfo As STARTUPINFO, lpProcessInformation As _
    PROCESS_INFORMATION) As Long

   Private Declare Function CloseHandle Lib "kernel32" _
    (ByVal hObject As Long) As Long

   Private Declare Function GetExitCodeProcess Lib "kernel32" _
    (ByVal hProcess As Long, lpExitCode As Long) As Long

   Private Const NORMAL_PRIORITY_CLASS = &H20&
   Private Const INFINITE = -1&

   Public Function ExecCmd(cmdline$)
    Dim proc As PROCESS_INFORMATION
    Dim start As STARTUPINFO

    ' Initialize the STARTUPINFO structure:
    start.cb = Len(start)

    ' Start the shelled application:
    ret& = CreateProcessA(vbNullString, cmdline$, 0&, 0&, 1&, _
       NORMAL_PRIORITY_CLASS, 0&, vbNullString, start, proc)

    ' Wait for the shelled application to finish:
       ret& = WaitForSingleObject(proc.hProcess, INFINITE)
       Call GetExitCodeProcess(proc.hProcess, ret&)
       Call CloseHandle(proc.hThread)
       Call CloseHandle(proc.hProcess)
       ExecCmd = ret&
   End Function

SIZE does matter.
"You're go at throttle up!"


Verwijderd

Als je met Micro$oft producten werkt zul je altijd eerst moeten kijken of er niet toevallig een workaround of een bugfix beschikbaar is, die jongens bij M$ kunnen nou eenmaal niet echt programmeren |:(

Verwijderd

Op maandag 22 oktober 2001 18:13 schreef MisterJava het volgende:
Als je met Micro$oft producten werkt zul je altijd eerst moeten kijken of er niet toevallig een workaround of een bugfix beschikbaar is, die jongens bij M$ kunnen nou eenmaal niet echt programmeren |:(
En hoeveel bugfixes en versies en kernels zijn er al van linux :?

Verwijderd

Topicstarter
Ik ga me niet mengen in de eeuwig durende ruzie Windows vs. Linux, ik gebruik ze beide. Maar van VB5 gebruik ik SP3, ik geloof de laatste versie.

Maar het probleem lijkt niet daar in te zitten. Ik ben uiteindelijk wat met mijn directory gaan schuiven, en dan bleek dat het programma het wil doet als hij in de dir "C:\Program Files\blabla\" stond het wel deed, en in dir "C:\Program Files\Mijn Software\" niet. Het lijkt wel dat als er 2 dirnamen van meer dan 8 karakters op elkaar volgen dat Shell moeite heeft met vinden van de .bat
MS :(

Ik zal zo de methode van Skinny eens proberen, maar inprincipe heb ik nu tenminste een tijdelijke oplossing.

  • Exterazzo
  • Registratie: Mei 2000
  • Laatst online: 17-09 14:12

Exterazzo

Qeasy

Op maandag 22 oktober 2001 19:38 schreef virnoctis het volgende:
Ik ga me niet mengen in de eeuwig durende ruzie Windows vs. Linux, ik gebruik ze beide. Maar van VB5 gebruik ik SP3, ik geloof de laatste versie.

Maar het probleem lijkt niet daar in te zitten. Ik ben uiteindelijk wat met mijn directory gaan schuiven, en dan bleek dat het programma het wil doet als hij in de dir "C:\Program Files\blabla\" stond het wel deed, en in dir "C:\Program Files\Mijn Software\" niet. Het lijkt wel dat als er 2 dirnamen van meer dan 8 karakters op elkaar volgen dat Shell moeite heeft met vinden van de .bat
MS :(

Ik zal zo de methode van Skinny eens proberen, maar inprincipe heb ik nu tenminste een tijdelijke oplossing.
als je directories gebruikt met spaties derin dan moet je altijd gebruik maken van aanhalingstekens dus zo bijv:
'C:\Program Files\Internet Explorer\iexplore.exe' http://www.tweakers.net

Audentia


Verwijderd

Topicstarter
dahhh, zo achtelijk ben ik nou ook weer niet. En als je het goed gelezen had zag je dat ik dat al gecontroleerd had.
Pagina: 1