无法使用位于上层文件夹中的vbs脚本打开exe文件

时间:2014-01-01 12:09:36

标签: vbscript wsh

我用代码制作了一个vbs脚本:

Dim objShell
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run("""MainForm.exe""")
Set objShell = Nothing

此脚本在MainForm.exe所在的文件夹中运行。一切正常,MainForm.exe开始使用此脚本运行。

但是,我需要该脚本只运行一个文件夹。此处问题开始(包含MainForm.exe的文件夹称为Deploy)。我在上层文件夹中创建了一个脚本:

CreateObject("WScript.Shell").Run("""G:\ROOT\KnowledgeBaseProdukcija\Deploy\MainForm.exe""")

但它一直告诉我这个:

enter image description here

似乎MainForm.exe正在运行,但出了什么问题?我也尝试了相对路径(这是我的首选方式),但结果相同:

CreateObject("WScript.Shell").Run("""..\KnowledgeBaseProdukcija\Deploy\MainForm.exe""")

我只是不明白两个脚本之间的区别是什么?

1 个答案:

答案 0 :(得分:2)

看起来您的MainForm.exe正在工作目录中查找文件。由于它是从MainForm.exe二进制文件的目录外部调用的,因此它无法找到它所寻找的内容。

这可能需要在MainForm应用程序代码中修复。它可能试图使用相对路径打开一个文件,并期望它与包含teh二进制文件的目录相对,但它现在实际上相对于工作目录。

您可以通过设置Shell对象的CurrentDirectory属性来解决此问题:

Dim shell
Set shell = CreateObject("WScript.Shell")
shell.currentdirectory = "G:\ROOT\KnowledgeBaseProdukcija\Deploy\"
shell.Run("""G:\ROOT\KnowledgeBaseProdukcija\Deploy\MainForm.exe""")

MainForm.exe s源内使用string thatpath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)查找安装路径并使用Path.Combine(thatpath, "./relative/path/to/resource")加载您希望在相对于可执行文件的路径中的任何文件来修复问题在源头。