Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.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
如何在vb.net中运行静默模式批处理脚本命令_Vb.net_Batch File_Cmd - Fatal编程技术网

如何在vb.net中运行静默模式批处理脚本命令

如何在vb.net中运行静默模式批处理脚本命令,vb.net,batch-file,cmd,Vb.net,Batch File,Cmd,我有一个.bat文件,用于在静默模式下运行.Msi。现在我想从vb.net运行批处理脚本命令。我尝试使用process.start()。使用process.start()打开文件,但问题是批处理脚本没有执行,并且没有安装.Msi。我尝试直接从cmd执行相同的命令,结果成功了 现在,有人可以帮助我如何从vb.net执行该命令(有人可以帮助我在从vb.net启动cmd进程后将该命令写入cmd窗口)。我尝试使用standardinput.Writeline(),它正在打开.txt文件,但无法执行用于安

我有一个.bat文件,用于在静默模式下运行.Msi。现在我想从vb.net运行批处理脚本命令。我尝试使用
process.start()
。使用
process.start()
打开文件,但问题是批处理脚本没有执行,并且没有安装.Msi。我尝试直接从cmd执行相同的命令,结果成功了

现在,有人可以帮助我如何从vb.net执行该命令(有人可以帮助我在从vb.net启动cmd进程后将该命令写入cmd窗口)。我尝试使用
standardinput.Writeline()
,它正在打开.txt文件,但无法执行用于安装.Msi文件的命令

       Dim command As String="@ echo off msiexec /i 
    ""C:\Users\tparvathaneni\Documents\Visual Studio 2015\Projects\SetupProject1\SetupProject1\bin\Debug\SetupProject1.msi"" /qn REBOOT=ReallySuppress echo pause >NUL shutdown.exe /r/t 000"
    Dim proc As New ProcessStartInfo
    proc.FileName = "cmd.exe"
    proc.RedirectStandardInput = True
    proc.RedirectStandardOutput = True
    proc.CreateNoWindow = True
    proc.UseShellExecute = False
    Dim pr As New Process 
    pr.StartInfo = proc
    pr.Start()
    pr.BeginOutputReadLine()      
    pr.StandardInput.WriteLine(command)

将其放入VBS将启动批处理脚本,而不带窗口或托盘图标。这可能比尝试向批处理窗口发送命令更简单

Set WshShell = CreateObject("WScript.Shell" ) 
WshShell.Run chr(34) & "C:\Temp\YourFile.bat" & Chr(34), 0 

我认为将
ProcessStartInfo
上的
CreateNoWindow
设置为
True
应该可以完成这项工作,因为您已经将
UseShellExecute
设置为
False
。设置CreateNoWindow=True有助于防止出现cmd弹出窗口。非常感谢。但是,我在执行批处理脚本时还有一个问题,即我提供的代码中的my命令。您需要使用
Environment.NewLine
(例如
“@echo off”&Environment.NewLine&“msiexec/I(…)”&Environment.NewLine
等分隔每个命令。请注意,您需要安排(/r(或/g)/t[秒])关闭,否则它将在启动安装程序后立即执行。“暂停”操作不起任何作用。使用参数执行“cmd.exe”(在
ProcessStartInfo
)“/k”或“start/WAIT”…或使用
“WAITFOR/T[Seconds]InstallComplete”&Environment.NewLine
。这将在指定的秒数内插入给定信号的等待超时。+最后一个批处理命令应为
“退出”&Environment.NewLine
。您可以将这些字符串链接为一个命令。但是您必须使用
环境来分隔不同的命令。NewLine
,而不是命令参数。例如“/qn”是
msiexec
的参数。它必须位于同一行中(即
msiexec/i”“[.msi文件路径])“/qn REBOOT=ReallySuppress”&Environment.NewLine
)。在此,我假设
REBOOT=ReallySuppress
msiexec
属性值。为了在安装后重新启动,您还可以使用
msiexec
开关
/promptreast
/forcerestart
。因此,您不需要自己处理它(除非您有理由)。这对我不起作用。我正在尝试在没有命令提示符弹出窗口的情况下运行批处理脚本。而您提供的代码至少对我没有任何作用。是否有其他方法来执行此操作。