Vbscript soll hta Datei unter 64 bit System mit windir-System32-mshta.exe starten und den Pfad der hta ermitteln
Guten Abend zusammen,
ich habe mal wieder ein kleines Problem und da meine vbs Kenntnisse ziemlich begrenzt sind hoffe ich auf eure Hilfe.
Ich habe ein vbscript der u.a. eine „*.hta“ Datei aufruft die ebenfalls eine Batchdatei aufruft. Hat bis jetzt auch super funktioniert. Aber auf einen Windows 7 - 64bit System wird die „*.hta“ automatisch mit der mshta.exe aus „C:\Windows\SysWOW64\” (als 32 bit Anwendung) gestartet, was zufolge hat das die shells aus der hta in “C:\Windows\SysWOW64\cmd.exe” gestartet werden. Dies führt dazu, dass nur ein eingeschränkter Befehlsumfang zur Verfügung steht.
Ich würde gerne die *.hta mit der „mshta.exe“ aus „C:\Window\System32“ starten. Da der Speicherort der Dateien (Start.vbs und Start.hta) sich immer ändert, soll auch das Verzeichnis ermittelt werden (ähnlich wie %~dp0 in Batch).
Hier ist der aktuelle Skript:
Viele dank schon mal
Gruß
xxsadmin
ich habe mal wieder ein kleines Problem und da meine vbs Kenntnisse ziemlich begrenzt sind hoffe ich auf eure Hilfe.
Ich habe ein vbscript der u.a. eine „*.hta“ Datei aufruft die ebenfalls eine Batchdatei aufruft. Hat bis jetzt auch super funktioniert. Aber auf einen Windows 7 - 64bit System wird die „*.hta“ automatisch mit der mshta.exe aus „C:\Windows\SysWOW64\” (als 32 bit Anwendung) gestartet, was zufolge hat das die shells aus der hta in “C:\Windows\SysWOW64\cmd.exe” gestartet werden. Dies führt dazu, dass nur ein eingeschränkter Befehlsumfang zur Verfügung steht.
Ich würde gerne die *.hta mit der „mshta.exe“ aus „C:\Window\System32“ starten. Da der Speicherort der Dateien (Start.vbs und Start.hta) sich immer ändert, soll auch das Verzeichnis ermittelt werden (ähnlich wie %~dp0 in Batch).
Hier ist der aktuelle Skript:
On Error Resume Next
set oShell= CreateObject("Wscript.Shell")
set oEnv = oShell.Environment("PROCESS")
oEnv("SEE_MASK_NOZONECHECKS") = 1
Set WshShell = CreateObject("WScript.Shell")
x = WshShell.RegDelete("HKCU\Software\InstallHTA\LastInstRetVal")
ret = WshShell.Run("install.hta",0,true)
x = WshShell.RegRead("HKCU\Software\InstallHTA\LastInstRetVal")
if x="" then x=99
oEnv.Remove("SEE_MASK_NOZONECHECKS")
Wscript.Quit (x)
Viele dank schon mal
Gruß
xxsadmin
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 169783
Url: https://administrator.de/contentid/169783
Ausgedruckt am: 26.11.2024 um 07:11 Uhr
12 Kommentare
Neuester Kommentar
Hallo xxsadmin,
zunächst mal: Warum erzeugst Du zwei Shell-Objekte? Eins reicht vollkommen aus.
Um in einem VBScript das Verzeichnis, aus dem es gestartet wurde, zu erfahren, kann man folgendes verwenden:
Ob das in einer HTA auch so funktioniert, musst Du testen.
Zum Problem 64Bit-mshta.exe: Schau mal hier nach, das scheint ein simples Problem mit der Zuordnung des HTA-Dateityps zu sein. Ich kann das aber nicht verifizieren - habe 32Bit Win7.
Gruß
Friemler
zunächst mal: Warum erzeugst Du zwei Shell-Objekte? Eins reicht vollkommen aus.
Um in einem VBScript das Verzeichnis, aus dem es gestartet wurde, zu erfahren, kann man folgendes verwenden:
Set objFSO = CreateObject("Scripting.FileSystemObject")
strStartDir = objFSO.GetParentFolderName(WScript.ScriptFullName)
Zum Problem 64Bit-mshta.exe: Schau mal hier nach, das scheint ein simples Problem mit der Zuordnung des HTA-Dateityps zu sein. Ich kann das aber nicht verifizieren - habe 32Bit Win7.
Gruß
Friemler
Hallo xxsadmin,
probiere mal folgendes:
und
Gruß
Friemler
[EDIT]
Kannst Du feststellen, ob die Scriptingengine, die das VBScript ausführt, eine 32Bit oder 64Bit-Version ist?
[/EDIT]
probiere mal folgendes:
Set objFSO = CreateObject("Scripting.FileSystemObject")
ScriptPath = objFSO.GetParentFolderName(WScript.ScriptFullName)
ret = WshShell.Run(windir & "\system32\mshta.exe " & Chr(34) & objFSO.BuildPath(ScriptPath, "test.hta") & Chr(34), 0, true)
Gruß
Friemler
[EDIT]
Kannst Du feststellen, ob die Scriptingengine, die das VBScript ausführt, eine 32Bit oder 64Bit-Version ist?
[/EDIT]
Hallo Zusammen.
Die Run-Method ist in der Lage Umgebungsvariablen aufzulösen.
Ich würde es ähnlich versuchen:
... wobei ich die Sinnhaftigkeit von Zeile 4 noch nicht begreife.
Grüße
rubberman
Die Run-Method ist in der Lage Umgebungsvariablen aufzulösen.
Ich würde es ähnlich versuchen:
Set objWSh = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
strScriptPath = objFSO.GetParentFolderName(WScript.ScriptFullName)
objWSh.Environment("PROCESS")("SEE_MASK_NOZONECHECKS") = 1
objWSh.Run "%SystemRoot%\system32\mshta.exe """ & strScriptPath & "\test.hta""", 0, True
... wobei ich die Sinnhaftigkeit von Zeile 4 noch nicht begreife.
Grüße
rubberman
Hallo rubberman,
wenn das VBScript aus dem Wurzelverzeichnis eines Laufwerks gestartet wurde, hat
[EDIT]
Wobei der hier wahrscheinlich garnicht gebraucht wird, ist ja der akutelle Pfad.
[/EDIT]
Gruß
Friemler
wenn das VBScript aus dem Wurzelverzeichnis eines Laufwerks gestartet wurde, hat
strScriptPath
z.B. den Wert D:\
und dann fasst Deine Zeile 5 in die Grütze beim Zusammenbauen des Pfades der HTA. Deshalb verwende ich am liebsten die BuildPath
-Methode des FileSystemObjects.[EDIT]
Wobei der hier wahrscheinlich garnicht gebraucht wird, ist ja der akutelle Pfad.
[/EDIT]
Gruß
Friemler
Zitat von @xxsadmin:
Rubberman ich denke diesbezüglich kommt meinerseits bestimmt noch die eine oder andere Frage auf dich zu. Ich hoffe du hast nichts dagegen
Warum sollte ich was dagegen haben.Rubberman ich denke diesbezüglich kommt meinerseits bestimmt noch die eine oder andere Frage auf dich zu. Ich hoffe du hast nichts dagegen
Zitat von @xxsadmin:
Ich würde auch ein Bier (oder mehrere) ausgeben. Du wohnst aber 400km von mir entfernt.
Feedback genügt mir schon als virtuelles Bier Ich würde auch ein Bier (oder mehrere) ausgeben. Du wohnst aber 400km von mir entfernt.
Grüße
rubberman
Dies kann nicht im richtigen Thread gepostet werden, weil Englisch ist meine erste Sprache. Hoffentlich hilft jemand.
Ich rufe eine VBS-Ausführung von Access 2010 VBA mit SysWOW64. Dieser arbeitete für mich:
Function SubmitScript()
Dim shellret As Variant
shellret = Shell("c:\windows\SysWOW64\wscript.exe W:\dir\script.vbs", vbNormalFocus)
End Function
Ich rufe eine VBS-Ausführung von Access 2010 VBA mit SysWOW64. Dieser arbeitete für mich:
Function SubmitScript()
Dim shellret As Variant
shellret = Shell("c:\windows\SysWOW64\wscript.exe W:\dir\script.vbs", vbNormalFocus)
End Function
Hi geekgreen.
Welcome to this forum. Feel free to write your posts in your native language. I'm sure a lot of forum members had a few lessons in English and are able to realize what you're talking about.
Currently I don't understand whether your post is a question. In this case you should explain what problem occurs.
But what's your question?
Regards
rubberman
Welcome to this forum. Feel free to write your posts in your native language. I'm sure a lot of forum members had a few lessons in English and are able to realize what you're talking about.
Currently I don't understand whether your post is a question. In this case you should explain what problem occurs.
Hoffentlich hilft jemand.
Translation: Hopefully somebody will help.But what's your question?
Regards
rubberman
Rubberman:
I thought this thread was about people having the same problem that I had resolved. And I was posting a solution. However, now with more translation, I see that this thread was discussing something similar, but not the same.
I did get something right; "that this may be posted in the wrong thread.
I thought this thread was about people having the same problem that I had resolved. And I was posting a solution. However, now with more translation, I see that this thread was discussing something similar, but not the same.
I did get something right; "that this may be posted in the wrong thread.
Hi geekgreen.
Your code is a solution for VBA, so it's useful for people who have the same problem in their Office programs. Goodness knows -- once somebody is stumbling upon this thread and your post is solving all problems
It's always good to see new faces in the forum. Especially if they want to help. Carry on
Regards
rubberman
Your code is a solution for VBA, so it's useful for people who have the same problem in their Office programs. Goodness knows -- once somebody is stumbling upon this thread and your post is solving all problems
It's always good to see new faces in the forum. Especially if they want to help. Carry on
Regards
rubberman