我正在尝试构建一个“加载程序”--意思是,当我运行它时,会启动一些预定义程序的程序。问题是,我不希望启动的程序中断我的工作流程,对每个程序都有0到2秒的“挂起”。
If showLog = True Then Console.WriteLine("Starting --->" + "Skype")
proc.StartInfo.FileName = "C:\Program Files (x86)\Skype\Phone\Skype.exe"
proc.StartInfo.Arguments = "/nosplash /minimized"
proc.Start()
proc.PriorityClass = ProcessPriorityClass.BelowNormal
我想我可以在“空闲”或"BelowNormal“优先级上启动这个过程。但是,我只能在程序加载之后设置优先级--这已经太晚了,。
有什么想法吗?
注意,所有的程序都正常工作,但是的问题是“冻结”持续时间很小--当加载的程序超过几个时,这个问题就变得很重要。
谢谢。
发布于 2013-09-20 16:09:28
一种选择是使用cmd /c start /low executable.exe参数启动Skype,这将在skype.exe启动后完成,然后您可以按名称检索新的Skype.exe进程。
proc.StartInfo.FileName = "cmd.exe"
proc.StartInfo.Arguments = "/c start /low ""C:\Program Files (x86)\Skype\Phone\Skype.exe"" /nosplash /minimized"
proc.Start()
proc.WaitForExit()
proc = (From p In System.Diagnostics.Process.GetProcessesByName("skype.exe") Order By p.StartTime Descending).FirstOrDefault()
`
发布于 2013-09-20 23:36:49
多亏了Mike ,我做到了:
(ProcessName =没有".exe“- "skype.exe”===>“skype”的执行文件名)
Private Sub StartProcessAndNormalize(Path As String, ProcessName As String, Optional Args As String = "", Optional PrintLog As Boolean = False)
If PrintLog = True Then Console.WriteLine("Starting --->" + ProcessName)
StartCmdProcess(Path, Args, ProcessName)
ProcessBackToNormal(ProcessName)
End Sub
Private Sub ProcessBackToNormal(ProcessName As String)
Dim proc As Process
Threading.Thread.Sleep(2000)
proc = (From p In System.Diagnostics.Process.GetProcessesByName(ProcessName) Order By p.StartTime Descending).FirstOrDefault()
Try
proc.PriorityClass = ProcessPriorityClass.Normal
Catch
Console.WriteLine("Can't find process " & ProcessName)
End Try
End Sub
Private Sub StartCmdProcess(Path As String, Args As String, Optional ProcessName As String = "")
Dim proc As Process = New Process
proc.StartInfo.FileName = "cmd.exe"
proc.StartInfo.Arguments = "/c start """ & ProcessName & """ /BelowNormal """ & Path & """ " & Args
proc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden
proc.Start()
proc.WaitForExit()
End Sub
我们就这样用它:
StartProcessAndNormalize("C:\Program Files (x86)\Skype\Phone\Skype.exe", "Skype", "/nosplash /minimized", showLog)
https://stackoverflow.com/questions/18920507
复制相似问题