一个noconsole程序

貌似是一个外国人写的,作用应该是让控制台的程序运行的时候不会弹出那个控制台黑框。想用来让它不显示 php-cgi.exe 运行后的窗口,可是效果不是预期的。

项目在 github 的位置:https://github.com/mtstickney/noconsole

项目源码:

 1 #include <windows.h>
 2 #include <shellapi.h>
 3 #include <stdio.h>
 4 
 5 #ifdef UNICODE
 6 #define MAIN wWinMain
 7 #else
 8 #define MAIN WinMain
 9 #endif
10 
11 int WINAPI MAIN(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR pCmdLine, int nCmdShow)
12 {
13     int argnum = 1;
14     STARTUPINFO si;
15     PROCESS_INFORMATION pi;
16     DWORD exit_code;
17     
18     ZeroMemory(&si, sizeof(si));
19     si.cb = sizeof(si);
20     si.dwFlags = STARTF_USESHOWWINDOW;
21     si.wShowWindow = SW_HIDE;
22     ZeroMemory(&pi, sizeof(pi));
23 
24     /* Note: argnum is not like argc... */
25     if (argnum < 1) {
26         fputs("Usage: noconsole <program> [<args>...]\n", stderr);
27         ExitProcess(1);
28     }
29 
30     /* Start the child process */
31     if (!CreateProcess(NULL, pCmdLine, NULL, NULL, FALSE, 0, NULL, NULL, /* Note that the previous should maybe be set to the cwd of the program being run */
32             &si,
33             &pi))
34     {
35         fprintf(stderr, "Error starting process, code %d.\n", (int)GetLastError());
36         ExitProcess(1);
37     }
38 
39     /* Wait for child exit */
40     WaitForSingleObject(pi.hProcess, INFINITE);
41 
42     GetExitCodeProcess(pi.hProcess, &exit_code);
43 
44     /* Clean up the handles */
45     CloseHandle(pi.hProcess);
46     CloseHandle(pi.hThread);
47 
48     ExitProcess(exit_code);
49     return 0;
50 }


 第35行是手动添加上的强制类型转换,不然在我的64位win8中会出错。

转载于:https://www.cnblogs.com/vanwoos/p/4855990.html

<think>我们参考用户提供的引用内容,特别是引用[1]和引用[3]中关于将程序打包成exe的步骤,结合用户的需求(生成或下载一个exe程序),我们将重点放在如何生成exe程序上(因为下载exe程序通常就是直接从官网下载,步骤简单,而生成exe程序是用户可能更关心的复杂操作)。根据引用[1]:LabVIEW程序打包生成exe安装程序(目标电脑无LabVIEW)的步骤包括:创建工程、生成应用程序、生成安装程序(其中安装程序会打包LabVIEW运行引擎)。根据引用[3]:Qt程序打包生成exe详细步骤包括:将程序依赖的文件(除exe本身外)添加,然后进行压缩打包,生成一个可独立运行的exe。另外,引用[2]和引用[4]提供了exe的基本概念和生成过程,我们可以借鉴。由于用户没有指定具体的编程语言,我们将以常见的几种情况来说明:情况1:使用Python生成exe(使用PyInstaller)情况2:使用C/C++生成exe(使用GCC编译)情况3:使用LabVIEW生成exe(根据引用[1])情况4:使用Qt生成exe(根据引用[3])由于用户问题比较开放,我们选择两种最常用的方式(Python和C/C++)进行详细说明,并简要提及其他方式。###生成exe程序的具体步骤####方法1:将Python程序打包为exe(使用PyInstaller)步骤:1.**安装Python环境**如果尚未安装Python,请从[Python官网](https://www.python.org/downloads/)下载并安装。2.**编写Python程序**创建一个简单的Python程序,例如`hello.py`:```pythonprint("Hello,World!")```3.**安装PyInstaller**打开命令提示符(CMD)或终端,运行:```bashpipinstallpyinstaller```4.**打包生成exe**在命令提示符中,进入程序所在目录,执行:```bashpyinstaller--onefilehello.py```其中`--onefile`参数表示将所有依赖打包成单个exe文件。5.**获取生成的exe**打包完成后,在`dist`文件夹中找到`hello.exe`,即可在其他Windows电脑上运行(即使没有安装Python)。>注意:PyInstaller打包时会包含Python解释器和依赖库,因此exe文件较大。####方法2:使用C/C++编译生成exe(使用GCC)步骤:1.**安装GCC编译器**下载安装MinGW(Windows下的GCC),从[MinGW官网](http://www.mingw.org/)下载并安装。安装时选择`gcc-core`和`g++`组件。2.**编写C程序**创建一个C程序,例如`hello.c`:```c#include<stdio.h>intmain(){printf("Hello,World!\n");return0;}```3.**编译生成exe**打开命令提示符,进入源文件目录,执行:```bashgcchello.c-ohello.exe```4.**运行exe**生成的`hello.exe`可以直接在Windows上运行(不需要额外安装运行库,因为默认链接了静态库)。####方法3:使用LabVIEW生成exe(参考引用[1])步骤:1.**创建LabVIEW工程**在LabVIEW中创建工程,并完成VI程序设计。2.**生成应用程序(exe)**在LabVIEW中选择“工具”菜单下的“生成应用程序或共享库(DLL)...”,按照向导生成exe文件。3.**生成安装程序**在生成exe后,继续使用LabVIEW的“创建安装程序”功能,将LabVIEW运行引擎和必要的支持文件打包进安装程序。这样生成的安装程序可以在没有LabVIEW的电脑上安装运行。####方法4:使用Qt生成exe(参考引用[3])步骤:1.**使用QtCreator编译生成Release版exe**在QtCreator中,将构建模式设置为Release,然后构建项目。2.**使用windeployqt工具收集依赖**在命令提示符中,进入生成的exe所在目录(在release文件夹内),运行:```bashwindeployqt<你的exe文件名>```此命令会自动将所需的Qt库和其他依赖复制到当前目录。3.**使用EnigmaVirtualBox打包成单文件(可选)**下载[EnigmaVirtualBox](https://enigmaprotector.com/en/aboutvb.html),将整个文件夹(除了exe本身)打包成一个单独的exe文件。###下载exe程序的一般步骤1.**从官方网站下载**-打开浏览器,访问提供软件的官方网站。-找到下载链接(通常标有“下载”或“Download”),点击下载。-下载完成后,双击exe文件运行安装程序(或直接运行,如果是绿色软件)。2.**注意事项**-只从可信的官方网站下载,避免恶意软件。-下载前确认软件兼容性(如32位/64位)。###总结-如果你是自己开发程序,需要将程序打包成exe,请根据开发语言选择上述打包方法。-如果你是想从网上下载一个exe程序,请访问该软件的官网进行下载。§§相关问题§§1.如何减少PyInstaller打包的exe文件大小?2.如何将Java程序打包成exe?3.如何为生成的exe文件添加图标?4.如何防止exe文件被反编译?5.在没有安装编译环境的电脑上如何编译C程序?</think>以下是根据不同需求生成或获取可执行文件(.exe)的详细操作步骤,涵盖多种常见场景: ### 一、Python程序打包为exe(使用PyInstaller) ```bash # 1. 安装打包工具 pip install pyinstaller # 2. 创建测试文件 hello.py echo print("Hello World!") > hello.py # 3. 基础打包(生成单文件exe) pyinstaller --onefile hello.py # 4. 添加图标(需准备.ico文件) pyinstaller --onefile --icon=app.ico hello.py # 5. 获取生成文件 # 生成的exe路径:dist/hello.exe ``` > **关键说明**: > - 打包后文件可在无Python环境的Windows运行[^2] > - 文件大小优化:添加`--upx-dir=UPX路径`启用压缩 > - 隐藏控制台:添加`--noconsole`(GUI程序专用) ### 二、C/C++程序生成exe(使用GCC) ```bash # 1. 安装MinGW编译器 # 下载地址:https://sourceforge.net/projects/mingw/ # 2. 编写测试程序 hello.c #include <stdio.h> int main() { printf("Hello World!"); return 0; } # 3. 编译生成exe gcc hello.c -o hello.exe # 4. 直接运行生成的文件 ./hello.exe ``` > 编译过程:预处理->编译->汇编->链接[^4] ### 三、LabVIEW生成安装包(无环境部署) 1. **创建工程** - 打开LabVIEW → 文件 → 新建项目 - 添加VI程序到项目 2. **生成应用程序** - 项目浏览器 → 程序生成规范 → 新建 → 应用程序 - 设置目标文件名和输出目录 3. **打包安装程序** - 程序生成规范 → 新建 → 安装程序 - 添加依赖项:勾选"包括LabVIEW运行时引擎" - 生成输出:Installer文件夹包含完整安装包[^1] ### 四、Qt程序打包exe(独立运行) ```bash # 1. 生成Release版本exe # 在Qt Creator中选择 Release 构建 # 2. 收集依赖库 windeployqt YourApp.exe # 3. 压缩打包(使用Enigma Virtual Box) # 添加所有依赖文件和exe到虚拟文件系统 # 勾选"压缩文件" → 生成单文件exe[^3] ``` ### 五、直接下载exe程序 1. **官方渠道下载** - 访问软件官网(如https://www.python.org/downloads/) - 查找"Windows installer"或"Download for Windows" - 选择`.exe`格式下载 2. **验证安全性** - 检查数字签名(右键exe → 属性 → 数字签名) - 使用VirusTotal扫描(https://www.virustotal.com/) ### 六、跨平台打包工具推荐 | 工具名称 | 支持语言 | 特点 | |----------------|--------------|--------------------------| | Inno Setup | 通用安装包 | 创建专业安装程序 | | NSIS | 通用安装包 | 脚本化定制安装流程 | | cx_Freeze | Python | 比PyInstaller更轻量 | | Electron | Web技术 | 打包网页应用为exe | > **注意事项**: > 1. 64位程序需在64位系统运行 > 2. 防病毒软件可能误报生成的exe > 3. 程序依赖的动态库需一并打包[^3] > 4. 版权声明:确保遵守相关软件许可协议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值