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)最初是一个机械上的概念,说的是两个不同的运动结构中间的连接件.后来这个概念 ...
随机推荐
- 写第一个 swift,iOS 8.0程序
class ViewController: UIViewController { @IBAction func btn_click(sender : AnyObject) { println(&quo ...
- Java-技术专区-虚拟机系列-内存模型(JMM)
Java8内存模型—永久代(PermGen)和元空间(Metaspace) 一.JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部 ...
- 使用Nuget重新安装packages.config中的组件的方法
Update-Package -ProjectName 'Ko.app.web' -Reinstall 该语句作用:按照packages.config中给出的程序组件,重新下载安装一遍.
- Draggable(拖动框)
一.class加载方式 <div id="box" class="easyui-draggable" style="width:400px;he ...
- 理解EntityFramework两个核心类型的职责 DbSet和D'bContext
DbSet与DbContext是多对一的关系DbSet是实体对象的集合,提供了实现CRUD的相应方法DbContext封装与数据库和数据模型相关的功能,依据数据实体状态创建SQL命令,将数据更改保存到 ...
- IIS ASP.NET MVC 上传文件到NAS目录
项目要求,网站用户上传的文件,存储到服务器挂接的NAS磁盘里,死活也写不进去,一直提示 System.IO.IOException: 指定的服务器无法运行请求的操作 阿里的客服也问过了, 一群只知道发 ...
- window 下搭建流媒体服务器ffmpeg nginx-rmtp-module
媒体介绍和需要下载需要软件 1.FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.在这里我只用到了它的视屏格式转换功能,将rtsp协议的视频流转成rtmp 2.ng ...
- makefile自动编译
1.格式: 目标:依赖 规则 规则前有一个tab键 ,缺少tab键出错,使用空格替代也不可以 (1). 例子: 编写makefile 编译 main.c ,fun.c , fun.h test ...
- Codeforces 1167F 计算贡献
题意:给你一个函数f,计算∑(i = 1 to n)(j = i to n) f(i, j).f(i, j)的定义是:取出数组中i位置到j位置的所有元素,排好序,然后把排好序的位置 * 元素 加起来. ...
- 【精通css读书笔记】 第八章 布局
学习了css布局的基础后又来翻阅<精通css>这本经典书籍,对布局有了进一步的认识. 基于浮动的布局 两列的布局仍然是使用一个元素向左浮动,一个元素向右浮动,值得注意的是要加入displa ...