如何编写和打包在Windows下运行的、带GUI的、小体积、不依赖平台、免安装的单个可执行文件软件

中杯的拿铁 2015-01-19 11:29:18
我有时候会需要编写一些小程序,比如年会的抽奖程序,比如日志查看分析小工具,等等。目前都是用 Java 写的,这样就要求目标机器必须安装 JRE,对于有些没有安装 JRE 的机器无法分享使用。而 C#、VB.NET 等也存在同样的问题,要求机器上必须装有 .NET Framework。

虽然对于Java程序有一个办法就是打包一个 JRE 进去,这样就不依赖目标机的 JRE 了,但是这样会导致程序的体积过大,一个实际上只有几百K的程序,打包起来要几十M。

Python虽然也能打包成exe,但是一个很小的甚至没有图形界面的程序也要打包出几个M,还是太大。

我现在想要了解一下,用哪种编程语言和工具,可以实现生成在Windows下运行的、带GUI的、目标文件体积很小,且不依赖于平台(JRE)的单文件绿色软件(也就是免安装,双击该exe即可运行)。

由于源代码是我自己的,大不了为不同的Windows版本多编译几次。编程语言也没有太大限制,我编写的程序都不算太复杂,不需要学太深入的东西,可以很快学会。

请多介绍几个,最好能比较一下。
...全文
641 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcmakebest 2015-02-10
  • 打赏
  • 举报
回复
绿色免安装, 那就DELPHI了.
中杯的拿铁 2015-01-20
  • 打赏
  • 举报
回复
引用 1 楼 xczhanglicheng 的回复:
win32的本地代码,都可以的,这个 哈用 说吗,
我想了解具体使用什么开发工具,以及什么开发语言。 “Win32的本地代码”,这个没有回答我的问题啊~~~
X-i-n 2015-01-20
  • 打赏
  • 举报
回复
那就vs6吧。而且windows系统自带某一版本的.net库,如果能确定你的软件使用范围,可以针对适用平台的默认版本的.net库来开发
时光软件 2015-01-20
  • 打赏
  • 举报
回复
win32的本地代码,都可以的,这个 哈用 说吗,
赵4老师 2015-01-20
  • 打赏
  • 举报
回复
#pragma comment(lib,"user32")
#pragma comment(lib,"gdi32")
#include <windows.h>
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
    PAINTSTRUCT ps;
    HDC hdc;
    HFONT hfont,ohfont;
    RECT r;
    COLORREF oc;

    switch(message) {
    case WM_CLOSE://按Alt+F4退出
        PostQuitMessage(0);
        break;
    case WM_PAINT:
        BeginPaint(hWnd, &ps);
        hdc = ps.hdc; // the device context to draw in
        GetClientRect(hWnd, &r); // Obtain the window's client rectangle
        hfont = CreateFont(240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "华文楷体");
        ohfont=(HFONT)SelectObject(hdc,hfont);
        oc=SetTextColor(hdc,0x00C080FF);
        SetBkMode(hdc, TRANSPARENT);
        TextOut(hdc,r.left+r.right/2-720, r.top+r.bottom/2-120,"最短画图程序",12);
        SelectObject(hdc,ohfont);
        SetTextColor(hdc,oc);
        DeleteObject(hfont);
        EndPaint(hWnd, &ps);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    MSG msg             = {0};
    WNDCLASS wc         = {0};
    HBRUSH hbrh;
    hbrh=CreateSolidBrush(0x00000000);
    wc.lpfnWndProc      = WndProc;
    wc.hInstance        = hInstance;
    wc.hbrBackground    = hbrh;
    wc.lpszClassName    = "minwindowsapp";
    wc.hCursor          = LoadCursor(NULL,IDC_ARROW);
    if( FAILED(RegisterClass(&wc)) ) return 1;

    if(FAILED(CreateWindow(wc.lpszClassName,
                        "Minimal Windows Application",
                        WS_POPUP|WS_VISIBLE,
                        0,
                        0,
                        GetSystemMetrics(SM_CXSCREEN),
                        GetSystemMetrics(SM_CYSCREEN),
                        0,
                        0,
                        hInstance,
                        NULL)))
        return 2;

    while( GetMessage( &msg, NULL, 0, 0 ) > 0 ) {
        DispatchMessage( &msg );
    }
    DeleteObject(hbrh);
    return 0;
}
zara 2015-01-20
  • 打赏
  • 举报
回复
这样要求,恐怕是只能 c/c++、汇编,只使用基本系统函数了;其它都可能需要库,连以前的个 vb 程序,在 win7 上都提示找不到 msvbvm50.dll 库了。至于 .net 库就更恶心了,库本身的庞大,连程序也是膨胀了几倍,打开看看,估计九成九的都是无用的垃.圾。
中杯的拿铁 2015-01-20
  • 打赏
  • 举报
回复
引用 2 楼 Runnerchin 的回复:
那就vs6吧。而且windows系统自带某一版本的.net库,如果能确定你的软件使用范围,可以针对适用平台的默认版本的.net库来开发
就是说只有使用微软很多年以前推出的 Visual Studio 6 才能实现这样的目的是吧?那个在 Windows 7 或者 Windows 8 上面可以安装的吧? 至于 .net 库,我就是不想受限于某个 .net 库。我看有很多小程序,都是在 Windows 下可以直接双击运行的,不论 XP、Windows 7还是别的,都可以,这个应该是不依赖某个 .net 库的。我就想知道这是用什么工具开发的,我也用它开发一些我自己的小程序,或者把我的 Java 程序移植过去。

18,124

社区成员

发帖
与我相关
我的任务
社区描述
Windows客户端使用相关问题交流社区
社区管理员
  • Windows客户端使用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧