vb启动外部应用程序的问题

时间:2022-10-01 20:47:52
有个外部应用程序(myapp.exe),启动前,需要设置环境变量,才能启动
这通常是通过编写一个批处理程序,来完成,
例如:
==== start.bat ===
set HOME_FOLDER='c:\app'
set TEMP_FOLDER='c:\temp'
myapp.exe 

运行start.bat即可正确启动myapp.exe

现在,需要用vb来控制这个程序的启动和退出,这个我知道可以用System.Diagnostics.Process来实现
但是如果用Process启动start.bat则会出现一个dos窗口,我不想看到这个窗口
如果直接启动myapp.exe则会因为环境变量未设置好,而导致myapp.exe运行不成功

有什么办法可以用vb先设置环境变量,然后启动myapp.exe吗?

承蒙赐教、不胜感激

10 个解决方案

#1


process.StartInfo.CreateNoWindow=true

#2


用c#设置环境变量,应该还是需要调用系统user32.dll链接库,你可以参考http://zhidao.baidu.com/question/53584405.html

#3


搜一下:批处理 隐藏CMD窗口

#4


可以在代码里设置环境变量:
Environment.SetEnvironmentVariable("PATH", path);

#5


用System.Diagnostics.Process来实现可以设置成不显示dos窗口的

#6


Dim psi As New System.Diagnostics.ProcessStartInfo
With psi 
    .CreateNoWindow = True
    .FileName = System.IO.Path.Combine(Application.StartupPath, "start.bat")
    .WindowStyle = ProcessWindowStyle.Hidden
End With
System.Diagnostics.Process.Start(psi)

#7


同意楼上。环境变量。在.net下也可以设置。

#8


引用 4 楼 findcaiyzh 的回复:
可以在代码里设置环境变量:
Environment.SetEnvironmentVariable("PATH", path);

学习了...

#9


我的代码给你参考,没有DOS窗口的


   Private Sub PingServer(ByVal state As Object)
      Dim UseTime As Integer
      Dim ps As New System.Diagnostics.Process
      Dim Output As String = ""

      ps.StartInfo.FileName = "ping.exe"
      ps.StartInfo.Arguments = "-w " & (_Timeout * 1000).ToString.Trim & " " & _Ip
      ps.StartInfo.UseShellExecute = False
      ps.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
      ps.StartInfo.RedirectStandardInput = False
      ps.StartInfo.RedirectStandardOutput = True
      ps.StartInfo.RedirectStandardError = True
      ps.StartInfo.CreateNoWindow = True
      UseTime = System.Environment.TickCount
      ps.Start()

      Output = ps.StandardOutput.ReadToEnd
      UseTime = System.Environment.TickCount - UseTime

      ps.Close()
      ps.Dispose()
      ps = Nothing

      SaveResult(UseTime, Output)

      UseTime = Nothing
      Output = Nothing
   End Sub

#10


方法很多,可以用API,也可以SHELL
当然你也可以继续用PROCESS

#1


process.StartInfo.CreateNoWindow=true

#2


用c#设置环境变量,应该还是需要调用系统user32.dll链接库,你可以参考http://zhidao.baidu.com/question/53584405.html

#3


搜一下:批处理 隐藏CMD窗口

#4


可以在代码里设置环境变量:
Environment.SetEnvironmentVariable("PATH", path);

#5


用System.Diagnostics.Process来实现可以设置成不显示dos窗口的

#6


Dim psi As New System.Diagnostics.ProcessStartInfo
With psi 
    .CreateNoWindow = True
    .FileName = System.IO.Path.Combine(Application.StartupPath, "start.bat")
    .WindowStyle = ProcessWindowStyle.Hidden
End With
System.Diagnostics.Process.Start(psi)

#7


同意楼上。环境变量。在.net下也可以设置。

#8


引用 4 楼 findcaiyzh 的回复:
可以在代码里设置环境变量:
Environment.SetEnvironmentVariable("PATH", path);

学习了...

#9


我的代码给你参考,没有DOS窗口的


   Private Sub PingServer(ByVal state As Object)
      Dim UseTime As Integer
      Dim ps As New System.Diagnostics.Process
      Dim Output As String = ""

      ps.StartInfo.FileName = "ping.exe"
      ps.StartInfo.Arguments = "-w " & (_Timeout * 1000).ToString.Trim & " " & _Ip
      ps.StartInfo.UseShellExecute = False
      ps.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
      ps.StartInfo.RedirectStandardInput = False
      ps.StartInfo.RedirectStandardOutput = True
      ps.StartInfo.RedirectStandardError = True
      ps.StartInfo.CreateNoWindow = True
      UseTime = System.Environment.TickCount
      ps.Start()

      Output = ps.StandardOutput.ReadToEnd
      UseTime = System.Environment.TickCount - UseTime

      ps.Close()
      ps.Dispose()
      ps = Nothing

      SaveResult(UseTime, Output)

      UseTime = Nothing
      Output = Nothing
   End Sub

#10


方法很多,可以用API,也可以SHELL
当然你也可以继续用PROCESS