控制台应用程序触发一个进程然后自行关闭

发布于 2024-09-15 01:59:47 字数 255 浏览 7 评论 0原文

我正在为我的应用程序编写一个小型更新程序。 我的流程是这样的: 应用程序.exe ->调用进程(updater.exe) ->应用程序.close() 然后,更新程序检查应用程序是否已关闭,然后覆盖 app.exe 和其他附属程序集。

所以我需要做这样的事情:启动我的 C# exe 应用程序,触发 updater.exe 进程,然后关闭应用程序,但不关闭子进程。

有没有办法在 .NET 中构建这种“即发即忘”的流程?

谢谢你, 南多

I'm writing a small updater for my app.
My flow would be like this:
app.exe -> call process(updater.exe) -> app.close()
Then, updater check if app is closed, then overwrites app.exe and other satellite assemblies.

So I need to do something like this: launch my C# exe app, fire a process for updater.exe, then close app, but without closing child process.

There's a way to build this kind of fire-and-forget process in .NET?

Thank you,
Nando

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

情归归情 2024-09-22 01:59:47

查看 Process 对象。您只需像这样调用 Process.Start 即可:

System.Diagnostics.Process.Start("updater.exe");

Look at the Process object. You would just call Process.Start like so:

System.Diagnostics.Process.Start("updater.exe");
指尖上得阳光 2024-09-22 01:59:47

是的,我正在这样做,但似乎 Process 没有启动...

我做了一个小帮助器类,称为 Updater:

Updater.CheckUpdates() 

-->启动一个调用“updater.exe -check”的进程,并且该进程有效(当进程完成时,控制返回到我的主应用程序)。我评估进程的返回代码,并在必要时设置 Updater.UpdatesAvalilable bool 标志。

Updater.ApplyUpdates()

-->启动一个调用“updater.exe -update”的进程来执行更新工作。

所以,我的代码是这样的:

    Updater.CheckUpdates();
    if (Updater.UpdatesAvailable)
    {
        Updater.ApplyUpdates();
        System.Environment.Exit(0);
    }

Updater.ApplyUpdates() 中的进程永远不会运行。
我知道,这不是优雅的代码,但我不知道如何实现我的目标。 :-)

谢谢你!
南多

Yes, I'm doing so, but seems that Process don't start...

I made a small helper class, called Updater:

Updater.CheckUpdates() 

--> starts a Process who call "updater.exe -check", and that works (when process finished, control return to my main app). I evaluate return code of process, and the I set Updater.UpdatesAvalilable bool flag, if necessary.

Updater.ApplyUpdates()

--> starts a Process who call "updater.exe -update", that do the update work.

So, my code is like this:

    Updater.CheckUpdates();
    if (Updater.UpdatesAvailable)
    {
        Updater.ApplyUpdates();
        System.Environment.Exit(0);
    }

Process in Updater.ApplyUpdates() never run.
I know, is not elegant code, but I don't know how to achieve my goal. :-)

Thank you!
Nando

靖瑶 2024-09-22 01:59:47

早上好,伙计们。
看来我找到了让它发挥作用的方法。
在我的帮助器类中,我连接了用于获取 stdIO 和 stdError 的事件,只是为了记录一些内容;删除这些,我就完成了我的工作:进程启动和主退出! :-)

只是为了让大家知道这一点:我的流程声明现在是这样的:

            Process process = new Process();
        process.EnableRaisingEvents = true;

        process.StartInfo = new ProcessStartInfo();
        process.StartInfo.Arguments = "-update";
        process.StartInfo.CreateNoWindow = true;
        process.StartInfo.ErrorDialog = false;
        process.StartInfo.FileName = "updater.exe";
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.WorkingDirectory = Directory.GetCurrentDirectory();

        process.Start();

谢谢大家!
南多

Good morning guys.
I found a way to make it work, it seems.
In my helper class I wired events for getting stdIO and stdError, just to log something; removing those, I get my work done: process start and main exit! :-)

Just to make all know about it: my process declaration is now like this:

            Process process = new Process();
        process.EnableRaisingEvents = true;

        process.StartInfo = new ProcessStartInfo();
        process.StartInfo.Arguments = "-update";
        process.StartInfo.CreateNoWindow = true;
        process.StartInfo.ErrorDialog = false;
        process.StartInfo.FileName = "updater.exe";
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.WorkingDirectory = Directory.GetCurrentDirectory();

        process.Start();

Thank you all!
Nando

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文