Winapi 运行一个简单的shell命令

Winapi 运行一个简单的shell命令,winapi,Winapi,当您只想运行简单的shell命令(如hg>test.txt)时,最好使用哪种WinAPI函数?发出命令有两种方式:Windows shell方式和命令行方式 Windows Shell通过对文件执行谓词来发出命令。谓词与注册表中的文件类型相关联。常见动词的例子有Open和Print。用于此操作的WinAPI是。Windows Shell不帮助您将进程的输出通过管道传输到文件。你可以使用它,但它是 命令行方法是使用函数。您可以使用ShellExecute(),但为什么不先尝试system()?我不

当您只想运行简单的shell命令(如
hg>test.txt
)时,最好使用哪种WinAPI函数?

发出命令有两种方式:Windows shell方式和命令行方式

Windows Shell通过对文件执行谓词来发出命令。谓词与注册表中的文件类型相关联。常见动词的例子有Open和Print。用于此操作的WinAPI是。Windows Shell不帮助您将进程的输出通过管道传输到文件。你可以使用它,但它是


命令行方法是使用函数。

您可以使用
ShellExecute()
,但为什么不先尝试
system()
?我不确定
ShellExecute()
是否真的可以执行管道或重定向。还有
CreateProcess()
,但这需要更多的工作
CreateProcess()
为您提供了最佳控制。

只需运行文件,然后和是最佳选项

当您想要将输出重定向到文件/运行shell命令时,这会使事情变得复杂

输出重定向是命令提示符的一项功能,因此,需要将要运行的命令传递给
cmd.exe
(在NT/XP+上)传递
/c
,并将命令作为参数(可以是
ShellExecute
CreateProcess


但是,最好的方法是使用
CreateProcess()
并创建自己的管道来与程序的stdin和stdout通信(这是
cmd
在内部所做的一切)

我尝试使用CreateProcess。我有一个问题:为什么
CreateProcess(0,“notepad.exe test.txt”,…)
工作,而
CreateProcess(0,“hg>test.txt”,…)
不工作?CreateProcess不处理重定向。请参阅以了解更多详细信息。CreateProcess的行为不像命令行,因为他确实尝试使用它。哦,这已经在几乎重复的…-1上得到了回答。乔纳森没有指出任何相关内容。奇怪的windows动词也适用于system()。尝试
#include int main(){system(“bitmap.bmp”)}
,假设一个名为“bitmap.bmp”的位图文件。在这种情况下,也许您可以指出ShellExecute优于system的好处?(如果有,我将是最后一个不投票支持你的人)@phresnel,伙计,这不是比赛。Paul询问WinAPI发出命令的方式,我解释了。至于你的例子,它甚至不执行动词。为文件类型注册谓词。例如,Word.Document.12文件类型有关联的动词Edit、New、OnenotePrintto、Open、OpenAsReadOnly、Print、Printto和ViewProtected。尽管我不是你的“花花公子”,但我必须道歉。我把动词和与文件相关的标准动作(“双击”)混淆了;但是,在这种情况下,我看不出
system()
如何比
ShellExecute
更糟糕,这与更好或更差无关。Paul询问有关使用WinAPI发出命令的问题。WinAPI使用动词发出命令。虽然45分钟前,您自己认为
system
是一个更糟糕的答案:
但是,正如Jonathan指出的,这有一些缺点,所以我不是开始判断的人;)。当然,在编辑之后,我的-1-对正消失了。SIDNEOTE:一个CORR也考虑<代码>系统<代码>作为OSAPI的一部分。
cmd /c "ipconfig >c:\debug\blah.txt"