调用“启动myapp”和“myapp”之间的区别

时间:2016-10-07 18:08:33

标签: windows batch-file command-line cmd command

在Windows批处理文件或命令提示符中,例如,调用start mspaintmspaint之间的区别是什么?他们似乎完全一样。

另一个例子,所有4个案例似乎做同样的事情。你能帮我理解微妙的差异吗?

  1. taskmgr
  2. C:\Windows\System32\Taskmgr.exe
  3. start taskmgr
  4. start C:\Windows\System32\Taskmgr.exe
  5. 后续:看起来start会打开一个单独的后台命令提示符来运行您在其后编写的程序(来源:https://technet.microsoft.com/en-us/library/cc770297(v=ws.11).aspx)。这与Linux的myApp &格式相同 - 您有&后缀吗?

2 个答案:

答案 0 :(得分:2)

启动程序

见开始/?并致电/?三种方式的帮助。

指定程序名称

c:\windows\notepad.exe

在批处理文件中,批处理将等待程序退出。什么时候 键入命令提示符不等待图形 程序退出。

如果程序是批处理文件,则传输控件并且不执行其余的调用批处理文件。

使用开始命令

start "" c:\windows\notepad.exe

开始启动程序但不等待。控制台程序在新窗口中启动。使用/ b开关强制控制台程序进入同一窗口,这将取消Start的主要目的。

开始使用Windows图形外壳 - 与在WinKey + R中键入(运行对话框)相同。试试

start shell:cache

另请注意第一组引号(如果有)必须是窗口标题。

使用呼叫命令

调用用于启动批处理文件并等待它们退出并继续当前批处理文件。

参考Start,只输入程序名称。

帮助Windows查找程序和文档

程序和文档可以添加到注册表中,因此在“开始 - 运行”对话框或快捷方式中键入其名称而不显示其路径,Windows可以找到它们。

REGEDIT4
;The bolded name below is the name of the document or program, <filename>.<file extension> 

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\IE.txt]

;The @ means the path to the file is assigned to the default value for the key.
;The whole path in enclosed in a quotation mark ".

@="\"C:\\Program Files\\Internet Explorer\\IE.txt\""

;Optional Parameters. The semicolon means don't process the line. Remove it if you want to put it in the registry

;Informs the shell that the program accepts URLs.

;"useURL"="1"

;Sets the path that a program will use as its' default directory. This is commented out.

;"Path"="C:\\Program Files\\Microsoft Office\\Office\\"

进行技术讨论。

CMD预处理命令并找到该文件,然后调用CreateProcess。开始 - 运行对话框或Start命令使用最终调用ShellExecuteEx的{​​{1}}。

这是CreateProcess规则 - 注意CMD提供CreateProcess的完整路径。 https://msdn.microsoft.com/en-us/library/ms682425

  

1.加载应用程序的目录。

     

2.父进程的当前目录。

     

3. 32位Windows系统目录。使用GetSystemDirectory函数获取此目录的路径。

     
      
  1. 16位Windows系统目录。没有函数可以获取此目录的路径,但会搜索它。该目录的名称是System。
  2.         

    5.Windows目录。使用GetWindowsDirectory函数获取此目录的路径。

         

    6. PATH环境变量中列出的目录。请注意,此功能不会搜索App Paths注册表项指定的每个应用程序路径。要在搜索序列中包含此每个应用程序路径,请使用ShellExecute函数。

CreateProcess在这里https://msdn.microsoft.com/en-us/library/bb759784(v=vs.85).aspx

CMD预处理可在我的Skydrive上获得 - 最初来自MS网站但不多了。请参阅Windows NT命令Shell Ch 2 https://1drv.ms/f/s!AvqkaKIXzvDieQFjUcKneSZhDjw

答案 1 :(得分:1)

当您希望应用程序启动时,您需要调用start application并立即返回命令shell以获取更多命令。

(在Linux上,最接近等效的start&后缀)

有些命令可以在没有start前缀的情况下执行此操作。这就是你所经历的。

另一方面,如果您希望应用程序立即返回“阻止”shell,请cmd /c前缀

尝试cmd /c taskmgr,你会看到它会阻止命令窗口,直到你退出它。

关于taskmgr的问题,3种可能性相同:

  • taskmgr位于系统路径中:系统找到或不使用完整路径
  • taskmgr立即返回命令窗口。在这种情况下,start是多余的。