2018-9-30-dotnet-core-通过修改文件头的方式隐藏控制台窗口
| title | author | date | CreateTime | categories |
|---|---|---|---|---|
|
dotnet core 通过修改文件头的方式隐藏控制台窗口
|
lindexi
|
2018-09-30 18:36:43 +0800
|
2018-07-24 19:57:37 +0800
|
Avalonia Roslyn dotnetcore
|
在带界面的 dotnet core 程序运行的时候就会出现一个控制台窗口,本文告诉大家使用最简单方法去隐藏控制台窗口。
最近在使用 Avalonia 开发,这是一个支持 dotnet framework 和 dotnet core 的框架,在开发的过程发现启动的窗口居然会出现控制台窗口。
在 VisualStudio 2017 的格式,如果是 dotnet framework 的程序,在没有设置 OutputType 为 WinExe 的是时候,启动程序会显示一个控制台窗口。
虽然在 dotnet framework 程序可以简单通过设置OutputType 为 WinExe 解决。如果这时使用跨平台多项目,就会看到 dotnet core 项目依旧会显示黑色窗口
最简单的方法是通过修改 PE 文件的方式,在 NSubsys就是编写了一个 Task 用来在编译完成获取 Exe 修改 PE 文件格式,隐藏黑色窗口
安装 NSubsys 的方法就是从 Nuget 搜索 NSubsys 然后使用 dotnet publish 一下就可以了
如果想知道为什么你安装了一个 Nuget 就可以帮你修改请看如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包 - walterlv
虽然知道了使用这个方法可以隐藏控制台,但是这里还是需要告诉大家一些原理。
在使用 C# 编译器,可以通过 csc 加上一个开关 /t: 告诉 csc 当前编译出来的是 控制台界面还是图形界面。通过下面不同的代码可以创建不同的软件
/t:exe 创建控制台软件
/t:winexe 创建图形界面软件
创建的软件的文件如 exe 或 dll 都是 PE 文件,在 PE 文件有一个 Subsystem 的字段表示了这个 PE 文件是控制台软件还是图形界面。在 PE 文件通过 Subsystem 可以告诉系统,现在打开的软件是控制台软件还是图形界面软件,这个值有很多个表示,其中可以使用IMAGE_SUBSYSTEM_WINDOWS_GUI表示这是一个 GUI 软件,通过IMAGE_SUBSYSTEM_WINDOWS_CUI可以表示这是一个控制台软件。
所以只需要通过修改 PE 文件的方式去告诉系统,这个软件是图形软件,就不会显示控制台。
更多关于 PE 文件请看 windows PE文件结构及其加载机制 - CSDN博客
Windows下Console和Win32程序差异-HelloWorld-51CTO博客
深入理解 Win32 PE 文件格式 - 国立秀才 - 博客园
更多阅读
2018-9-30-dotnet-core-通过修改文件头的方式隐藏控制台窗口的更多相关文章
- dotnet core 通过修改文件头的方式隐藏控制台窗口
原文:dotnet core 通过修改文件头的方式隐藏控制台窗口 在带界面的 dotnet core 程序运行的时候就会出现一个控制台窗口,本文告诉大家使用最简单方法去隐藏控制台窗口. 最近在使用 A ...
- .net core各种修改环境变量的方式
除了修改系统变量,或者程序硬编码中修改,还有以下方法: 发布在IIS中,修改web.config <environmentVariables> <environmentVariabl ...
- dotnet core 隐藏控制台
如果写一个控制台程序,需要隐藏这个控制台程序,可以使用本文的方法 如果是在 Windows 下运行, 可以使用一些系统提供的方法隐藏控制台.如果是 Linux 下,都是控制台,就不用隐藏了 复制下面的 ...
- asp dotnet core 通过图片统计 csdn 用户访问
在 csdn 的访问统计里面,只能用 csdn 提供的访问统计,因为在 csdn 中不支持在博客加上 js 代码,也就是无法使用友盟等工具统计. 通过在 asp dotnet core 创建一个图片链 ...
- dotnet core 在 MIPS 下的移值进度
本文仍处于修订中 写在开始前 我们的主要业务基于 dotnet core 2.x 与 3.1 完成,目前 dotnet core 3.1 支持的 CPU 架构列表中还不包含龙芯,且在 gitlab i ...
- 使用dd备份和恢复ASM中的数据文件头
这里用大家随处可见的(除了extent分布的x$kffxp需要百度和google外),其余都是文档中有详细记载的常用ASM视图来实现同样功能: 下面的用于从ASM中备份数据文件头: SQL> s ...
- 一文说通Dotnet Core的后台任务
这是一文说通系列的第二篇,里面有些内容会用到第一篇中间件的部分概念.如果需要,可以参看第一篇:一文说通Dotnet Core的中间件 一.前言 后台任务在一些特殊的应用场合,有相当的需求. 比方, ...
- Docker 简单发布dotnet core项目 文本版
原文:https://www.cnblogs.com/chuankang/p/9474591.html docker发布dotnet core简单流程 照着步骤来基本没错 但是有几个要注意的地方: v ...
- 一文说通Dotnet Core的中间件
前几天,公众号后台有朋友在问Core的中间件,所以专门抽时间整理了这样一篇文章. 一.前言 中间件(Middleware)最初是一个机械上的概念,说的是两个不同的运动结构中间的连接件.后来这个概念 ...
随机推荐
- 大型项目必备IPC之其他IPC方式(二)
阿里P7Android高级架构进阶视频免费学习请点击:https://space.bilibili.com/474380680IPC的6种方式IPC是Inter-Process Communicati ...
- python 包管理工具 pip 的配置
近几年来,python的包管理系统pip 越来越完善, 尤其是对于 windows场景下,pip大大改善了python的易用性. https://www.cnblogs.com/yvivid/p/pi ...
- change transformation file in PI interface
1. Jane extends the ZTMMASKU sap table 2. Jane write the program to write the new attribute to the t ...
- java 文件读取写入
public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. */ public static void readFileB ...
- celery中配置redis密码时的ValueError: invalid literal for int() with base 10: 'xxxx'
原配置: celery_broker = 'redis://:xxxx#xxxx@172.17.0.1:6379/0' # docker0 错误原因: 密码中不能有 # ? 等特殊字符 (无语O__O ...
- 【LeetCode】Math
[263] Ugly Number [Easy] 一个数的质因子只有2,3,5就叫丑数,写个函数判断丑数. //Author: Wanying //注意 0 和 1 的corner case, 你居然 ...
- spring security学习总结
这几天一直在学习spring security的相关知识.逛各大论坛,看相关api与教学视频,获益良多! 简介 Spring Security是为基于Spring的企业应用系统提供声明式的安全访问控制 ...
- vue中使用v-if判断数组长度是出现length报错
在vue中使用v-if判断数组的长度时出现报错 <el-collapse-item :key="index" v-if="data.childrens.length ...
- PHP ftp_delete() 函数
定义和用法 ftp_delete() 函数删除 FTP 服务器上的一个文件. 如果成功,该函数返回 TRUE.如果失败,则返回 FALSE 和一个警告. 语法 ftp_delete(ftp_conne ...
- 【LeetCode 17】电话号码的字母组合
题目链接 [题解] 用回溯法搞一下. 一搞就有~ 注意输入空串的时候别返回那个空串.. [代码] class Solution { public: string dic[10]; vector< ...