Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 使用/d选项运行批处理文件_Windows_Command Prompt_Installshield - Fatal编程技术网

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

Windows 使用/d选项运行批处理文件,windows,command-prompt,installshield,Windows,Command Prompt,Installshield,我已经使用Installshield在应用程序的安装程序上工作了一段时间,不久前我遇到了一个问题,当我使用LaunchApplication调用的批处理文件无法具体执行时,它执行了,但在错误的目录中。我决定深入研究这个问题,偶然发现了这篇文章。事实证明,问题在于自动运行注册表项,该注册表项定义如下: cd /d C:\Blahblah\Yadayada 因此,在批处理文件实际执行之前,该命令更改了目录。 批处理文件是最基本的文件,如下所示: :start foo.exe %1 --bar %2

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

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
因此,基本上,这个批处理文件期望它将从正确的目录启动,而事实并非如此。我在LaunchApplication调用中将INSTALDIR变量附加到batchname中,这一点很清楚,在未设置自动运行键的情况下,它可以很好地工作。 最后,我终于问到了一个问题——有没有办法为单个批处理文件提供启动选项?我知道提供/d选项将使自动运行变得无用,但它只在直接调用时有效

例如,假设我有一个带有简单'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将是路径。这似乎是一个解决方案,但我发现必须隐式更改文件夹的路径会适得其反,因为在缺少自动运行键的情况下,它工作得非常好。
所以,我想知道是否有任何解决这个自动运行关键问题的方法。也许,就像我在标题中提到的,批处理文件的/d选项,这样当它运行时,它将覆盖自动运行的全局选项,并将从它应该启动的位置启动,或者类似的技术?另外,我可能不知道LaunchApplication函数中有某种选项?

请-有什么问题?描述该批次应该做什么以及实际结果是什么。那很简单。我们不需要也不想要支持性格分析的战争与和平。我描述了我自己遇到的问题和解决方案,所以它们不会被第二次和第三次推荐给我。这不是一场战争与和平,我只是提供了可能有助于解决这个问题的所有细节。tl;dr:所以,基本上我的批处理应该从正确的目录启动,但它是从自动运行注册表项中设置的目录启动的。运行批处理文件时,有没有办法忽略自动运行键?