首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在不挂起VB.NET / C#上的工作流的情况下启动进程

在不挂起VB.NET / C#上的工作流的情况下启动进程
EN

Stack Overflow用户
提问于 2013-09-20 15:29:53
回答 2查看 853关注 0票数 1

我正在尝试构建一个“加载程序”--意思是,当我运行它时,会启动一些预定义程序的程序。问题是,我不希望启动的程序中断我的工作流程,对每个程序都有0到2秒的“挂起”

代码语言:javascript
运行
复制
            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“优先级上启动这个过程。但是,我只能在程序加载之后设置优先级--这已经太晚了,

有什么想法吗?

注意,所有的程序都正常工作,但是的问题是“冻结”持续时间很小--当加载的程序超过几个时,这个问题就变得很重要。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-09-20 16:09:28

一种选择是使用cmd /c start /low executable.exe参数启动Skype,这将在skype.exe启动后完成,然后您可以按名称检索新的Skype.exe进程。

代码语言:javascript
运行
复制
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()

`

票数 0
EN

Stack Overflow用户

发布于 2013-09-20 23:36:49

多亏了Mike ,我做到了:

(ProcessName =没有".exe“- "skype.exe”===>“skype”的执行文件名)

代码语言:javascript
运行
复制
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

我们就这样用它:

代码语言:javascript
运行
复制
StartProcessAndNormalize("C:\Program Files (x86)\Skype\Phone\Skype.exe", "Skype", "/nosplash /minimized", showLog)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18920507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档