[VBA] Shell kan bestand niet vinden tijdens uitvoering

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • krietjur
  • Registratie: Februari 2001
  • Laatst online: 12:02

krietjur

Where am I?

Topicstarter
Ik loop tegen een, voor mij, vreemd probleem aan.

Zeer simpel stukje code:

code:
1
2
3
Private Sub CommandButton1_Click()
    Shell ("c:\windows\system32\msg.exe")
End Sub


Formulier met 1 knopje, als ik er op klik moet het shell commando worden uitgevoerd. Bovenstaande geeft bij mij de melding dat het bestand niet kan worden gevonden. Als ik msg.exe verander in een andere executable in dezelfde directory werkt het wel. Vanuit een command prompt die ik gewoon opstart werkt msg.exe ook gewoon. Wanneer ik een command prompt open vanuit VBA, kan hij de hele msg.exe gewoon niet vinden.

Waarom? Alle .exe bestanden in de system32 directory kan ik aanroepen, maar net degene die ik nodig heb niet :( Ik heb ook de rechten van msg.exe bekeken, die zijn gelijk aan alle andere exe's. Daarbij werkt het wel als ik gewoon zelf een command prompt open en dit gaat met dezelfde useraccount.

Ik snap het niet meer.. hopelijk iemand anders wel ;)

Acties:
  • 0 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 21:33
krietjur schreef op donderdag 23 oktober 2014 @ 09:56:
Ik loop tegen een, voor mij, vreemd probleem aan.

Zeer simpel stukje code:

code:
1
2
3
Private Sub CommandButton1_Click()
    Shell ("c:\windows\system32\msg.exe")
End Sub


Formulier met 1 knopje, als ik er op klik moet het shell commando worden uitgevoerd. Bovenstaande geeft bij mij de melding dat het bestand niet kan worden gevonden. Als ik msg.exe verander in een andere executable in dezelfde directory werkt het wel. Vanuit een command prompt die ik gewoon opstart werkt msg.exe ook gewoon. Wanneer ik een command prompt open vanuit VBA, kan hij de hele msg.exe gewoon niet vinden.

Waarom? Alle .exe bestanden in de system32 directory kan ik aanroepen, maar net degene die ik nodig heb niet :( Ik heb ook de rechten van msg.exe bekeken, die zijn gelijk aan alle andere exe's. Daarbij werkt het wel als ik gewoon zelf een command prompt open en dit gaat met dezelfde useraccount.

Ik snap het niet meer.. hopelijk iemand anders wel ;)
Is het echt een melding die zegt "kan msg.exe niet vinden" of is het een message die aangeeft dat iets wat msg.exe nodigheeft niet kan worden gevonden?
M.a.w: Heeft msg.exe niet gewoon een dependency in zich die niet gevonden kan worden? (Al is 't maar een call naar b.v. "cmd.exe" die niet gevonden kan worden).

Acties:
  • 0 Henk 'm!

  • krietjur
  • Registratie: Februari 2001
  • Laatst online: 12:02

krietjur

Where am I?

Topicstarter
Hij kan echt msg.exe niet vinden.
Ik ben er inmiddels al wel achter waarom.. als ik vanuit Excel/VBA een command prompt open, en ik ga naar de c:\windows\system32 directory, dan kom ik in werkelijkheid terecht in de C:\Windows\SysWOW64 directory. (getest door een test directory aan te maken en die verschijnt dan dus inderdaad in C:\Windows\SysWOW64 en niet in C:\Windows\system32).

In die SysWOW64 directory bestaat geen msg.exe

Hoe ik nu vanuit mijn VBA command prompt wel bij de echte system32 map kan komen is mij nog een raadsel ;)

Acties:
  • 0 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 21:33
krietjur schreef op donderdag 23 oktober 2014 @ 10:47:
Hij kan echt msg.exe niet vinden.
Ik ben er inmiddels al wel achter waarom.. als ik vanuit Excel/VBA een command prompt open, en ik ga naar de c:\windows\system32 directory, dan kom ik in werkelijkheid terecht in de C:\Windows\SysWOW64 directory. (getest door een test directory aan te maken en die verschijnt dan dus inderdaad in C:\Windows\SysWOW64 en niet in C:\Windows\system32).

In die SysWOW64 directory bestaat geen msg.exe

Hoe ik nu vanuit mijn VBA command prompt wel bij de echte system32 map kan komen is mij nog een raadsel ;)
Blijkbaar een standaard redirect op 64-bit systemen. Volgens deze link kan je in in ieder geval C# (en vast ook wel in VBA) de redirect uitzetten voor de specifieke thread:
MSDN: File getting coped to SysWOW64 instead of System32

Een andere oplossing is een shortcut bouwen voor msg.exe in sysWOW64, maar als je wilt dat je programma bij anderen kan werken zou je dat in je installatie/deployment mee moeten nemen, weet niet of dat een lekkere oplossing is.

Hier kan je ook kijken: MSDN: File System Redirector (Windows) , eerste comment geeft een mogelijke oplossing.

[ Voor 8% gewijzigd door Merethil op 23-10-2014 10:54 ]


Acties:
  • 0 Henk 'm!

  • krietjur
  • Registratie: Februari 2001
  • Laatst online: 12:02

krietjur

Where am I?

Topicstarter
Thnx voor de duw in de goede richting!
Ik ben nu tot deze oplossing gekomen:


code:
1
2
3
4
5
6
7
Private Sub CommandButton1_Click()
    Dim objWshShell As Object
    Set objWshShell = CreateObject("WScript.Shell")
    objWshShell.Run "%windir%\Sysnative\cmd.exe " & _
      "/C start %windir%\System32\msg.exe /SERVER:pcnaam * test", True
    Set objWshShell = Nothing
End Sub

[ Voor 0% gewijzigd door BtM909 op 23-10-2014 11:40 ]