使用/ d选项运行批处理文件

时间:2014-11-10 11:52:53

标签: windows command-prompt installshield

我已经在我的应用程序的安装程序上工作了一段时间(使用Installshield),前段时间我遇到了问题,当我使用LaunchApplication调用的批处理文件无法执行时(具体来说) - 它执行了,但在错误的目录中)。我决定深入研究这个问题并偶然发现this篇文章。事实证明,问题在于Autorun注册表项,该注册表项由以下内容定义:

cd /d C:\Blahblah\Yadayada

因此,在批处理文件实际执行之前,此命令已更改目录。 批处理文件是最基本的,如下所示:

:start
foo.exe %1 --bar %2 --baz %3
if errorlevel 1 goto fail
ECHO Success
goto end
fail:
ECHO Fail
:end

因此,基本上这个批处理文件希望它将从正确的目录启动,但事实并非如此。我在启动应用程序调用中将INSTALDIR变量附加到batchname,只是为了清楚,并且在未设置自动运行键时它完全正常。 而且,我终于得到了一个问题 - 有没有办法为个别批处理文件提供启动选项?我知道提供/ d选项会使Autorun无效,但它只适用于直接调用。

例如,我们假设我的批处理文件包含简单的“dir'命令(让我们称之为foo.bat),我的自动运行键定义如上所示。我用/ d选项(CMD / d)运行命令提示符,然后运行' dir'直接我将获得我目前所处的文件夹(例如用户文件夹)的内容;但是,如果我启动foo.bat,我将获得C:\ Blahblah \ Yadayada的内容,因为Autorun命令将首先执行,设置默认文件夹,并且只有在此之后才能执行' dir'命令将被调用。

所以,我个人在这里看到了一些选择。首先 - 删除自动运行密钥,如果必须仅应用于一台计算机,这将是最合适和最简单的解决方案 - 我不可能期望每个用户自己处理他们的自动运行密钥。其次,应该适用于所有人(但我还没有测试过),将提供安装文件夹的路径作为批处理文件的额外参数,然后将目录更改为:

:start
%4
cd %5
foo.exe %1 --bar %2 --baz %3
...

其中%4为磁盘字母,%5为路径。这似乎是一个解决方案,但我发现我必须隐含地改变文件夹的路径,因为当Autorun密钥不存在时它能很好地工作。 所以,我想知道是否有关于此Autorun密钥问题的任何解决方法。也许,就像我在标题中提到的那样,批处理文件的/ d选项是这样的,当它运行时它将覆盖Autorun的全局选项,并且实际上将从它应该启动的地方启动,或者某种类似的技术?另外,也许在LaunchApplication()函数中有某种选项我不知道?

0 个答案:

没有答案