当前位置: 代码网 > it编程>编程语言>C# > C#生成exe并用process运行的流程步骤

C#生成exe并用process运行的流程步骤

2024年09月07日 C# 我要评论
前言需要写一个小程序来监控桌面的情况,所以想到用cmd来运行exe监控一、生成exe1.发布自包含版本假设你已经在 visual studio 中打开了项目,以下是发布自包含版本的步骤:打开项目属性:

前言

需要写一个小程序来监控桌面的情况,所以想到用cmd来运行exe监控

一、生成exe

1.发布自包含版本

假设你已经在 visual studio 中打开了项目,以下是发布自包含版本的步骤:

打开项目属性:右键点击项目 -> 属性。

选择“发布”选项卡。

选择“自包含”:在“发布模式”下拉菜单中选择“自包含”。

选择目标运行时:选择 win-x64 或适合的目标平台。

发布项目:点击“发布”。

发布完成后,你可以在发布的目录中找到你的应用程序及其所有依赖项,然后将其复制到目标机器上运行即可。

2.一些问题

我运行遇到报错:

system.platformnotsupportedexception: system.management currently is only supported for windows desktop applications.
   at system.management.managementobjectsearcher..ctor(string querystring)
   at flaui.core.windowsapi.windowsapitools.getmainmodulefilepath(process process)
   at flaui.core.application.attach(process process)

遇到的 system.platformnotsupportedexception 错误是因为 system.management 命名空间中的类仅支持在传统的 windows 桌面应用程序(如基于 .net framework 的应用程序)中使用,而不是在 .net core 或 .net 5+ 中使用。

flaui 库使用 system.management 来获取某些系统信息,例如进程的主模块文件路径。在 .net core 或 .net 5+ 中,system.management 不可用。

解决这个问题的方法有两种:

使用 .net framework:你可以将项目迁移到 .net framework。

使用替代方法:你可以在 .net core 或 .net 5+ 中使用其他方法来获取相同的信息。

使用 .net framework

如果你可以接受使用 .net framework,你可以将项目转换为 .net framework 项目。这通常涉及更改项目文件中的 targetframework 元素。

修改项目文件

打开你的 .csproj 文件,将 targetframework 更改为 .net framework 4.7.2 或更高版本:

<project sdk="microsoft.net.sdk">

  <propertygroup>
    <outputtype>exe</outputtype>
    <targetframework>net472</targetframework>
  </propertygroup>

  <itemgroup>
    <packagereference include="flaui.core" version="3.5.0" />
    <packagereference include="flaui.uia3" version="3.5.0" />
  </itemgroup>

</project>

二、使用process调用exe

如果你在一个程序中使用 cmd 运行了一个 exe 文件,而该 exe 文件的执行导致了你的程序无法继续执行,这可能是因为以下几个原因:

子进程阻塞了父进程:

如果子进程(即你运行的 exe 文件)没有正确关闭,可能会导致父进程(即你的程序)被阻塞。

资源锁定:

exe 文件可能占用了某些资源(如文件句柄、内存等),导致父进程无法继续执行。

无限循环:

exe 文件中可能存在无限循环或长时间运行的任务,导致它不会自动退出。

命令行挂起:

如果 exe 文件在命令行中运行并且没有退出,可能会导致命令行窗口一直保持打开状态,从而影响到父进程的继续执行。

1.解决方法

如果你希望在启动一个外部 exe 文件后让主程序继续执行,而不等待 exe 文件结束,可以使用 process.start 方法的非阻塞模式。这意味着启动 exe 文件后,你的程序将继续执行后续代码。

以下是如何做到这一点的示例代码:

示例代码

使用 process.start 启动 exe 文件:

使用 process.start 方法启动 exe 文件,并设置 useshellexecute 为 false。

设置 createnowindow 为 true,以避免创建新的命令行窗口。

确保 exe 文件在后台运行:

使用 startinfo.arguments 来传递参数,确保 exe 文件在后台运行。

示例代码

using system;
using system.diagnostics;

class program
{
    static void main(string[] args)
    {
        console.writeline("starting exe file...");

        // 构造 processstartinfo 对象
        processstartinfo startinfo = new processstartinfo
        {
            filename = "path_to_your_exe.exe", // 替换为你的 exe 文件路径
            useshellexecute = false,
            redirectstandardoutput = true,
            createnowindow = true
        };

        // 启动 exe 文件
        process.start(startinfo);

        console.writeline("exe file started in background.");

        // 主程序继续执行后续代码
        console.writeline("parent program continues...");

        // 示例:执行其他操作
        dosomethingelse();

        // 等待用户输入以保持控制台窗口打开
        console.writeline("press any key to exit...");
        console.readkey();
    }

    static void dosomethingelse()
    {
        console.writeline("performing other tasks...");
        // 这里可以执行其他任务
    }
}

说明

1.启动 exe 文件:

使用 process.start(startinfo) 启动 exe 文件。这不会阻塞当前程序的执行。

避免创建新窗口:

设置 createnowindow = true 可以避免创建新的命令行窗口。

继续执行后续代码:

2.启动 exe 文件后,程序将继续执行 main 方法中的后续代码。

3.测试

运行上述程序,你会看到:

输出 “starting exe file…”

exe 文件将在后台启动

输出 “exe file started in background.”

输出 “parent program continues…”

执行其他任务

等待用户输入以保持控制台窗口打开

以上就是c#生成exe并用process运行的流程步骤的详细内容,更多关于c#生成exe并运行的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com