V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
lskjdfgl
V2EX  ›  程序员

如何将 visual c++ + Windows 窗体应用程序 打包

  •  
  •   lskjdfgl · 2024-01-02 09:37:52 +08:00 · 2123 次点击
    这是一个创建于 384 天前的主题,其中的信息可能已经有所发展或是发生改变。
    程序是:visual c++ + Windows 窗体应用程序
    需求:在项目打包的时候将.net framework 的运行时信息一起打包
    期待:将程序复制到没有 .net framework 的电脑上也可以直接运行,不用先安装 .net framework, 似于 .Net Core 的独立发布。

    请问我该如何实现这样的功能
    第 1 条附言  ·  2024-01-02 11:28:45 +08:00

    20240102112551

    18 条回复    2024-01-02 15:14:14 +08:00
    ShadowPower
        1
    ShadowPower  
       2024-01-02 09:40:38 +08:00
    静态链接
    编译选项/MT
    lskjdfgl
        2
    lskjdfgl  
    OP
       2024-01-02 10:04:28 +08:00
    @ShadowPower 好像不行,生成后还是只有一个 exe 没有其他的 dll ,在没有 .net framework 的系统上还是提示:

    若要运行此应用程序,您必须首先安装 .NET Framework 的以下版本之一:

    v4.0.30319
    ShadowPower
        3
    ShadowPower  
       2024-01-02 10:16:47 +08:00
    那是 C#程序吧……
    .NET Framework 4.0 的话,无解
    lonewolfakela
        4
    lonewolfakela  
       2024-01-02 10:40:01 +08:00
    visual c++ Windows 窗体应用程序运行时是不需要.net framework 的,你最好先研究清楚是不是搞错了啥……
    nuk
        5
    nuk  
       2024-01-02 10:47:38 +08:00
    publish 的时候自包含不行么
    tool2d
        6
    tool2d  
       2024-01-02 11:01:30 +08:00
    vc 似乎可以混合编程,就是一部分用 c#,另外一部分用 c++,对新手很容易搞混。

    如何可以的话,考虑让 gpt 把 c#代码转换成 c++,就可以用一楼的方法解决了。
    tsanie
        7
    tsanie  
       2024-01-02 11:07:05 +08:00
    或者可以选择.net core ,然后 publish 成 self-contained 的
    ysc3839
        8
    ysc3839  
       2024-01-02 11:13:32 +08:00 via Android
    你先截图看看是 C++还是 C#吧
    zsxzy
        9
    zsxzy  
       2024-01-02 11:19:42 +08:00
    nsis
    Cloutain
        10
    Cloutain  
       2024-01-02 11:20:04 +08:00
    VC 程序还是.NET 程序都搞不清?或者是 VC 程序引用了.NET 的库?
    lskjdfgl
        11
    lskjdfgl  
    OP
       2024-01-02 11:27:50 +08:00
    @lonewolfakela 项目有 vc++ 和 .net
    ![20240102112551]( https://i2.100024.xyz/2024/01/02/imq6i3.webp)
    lskjdfgl
        12
    lskjdfgl  
    OP
       2024-01-02 11:30:13 +08:00
    @ysc3839 @Cloutain 已追加截图
    @tsanie @nuk 不是新建的 c#项目不能使用 .net core 和 publish
    cnbatch
        13
    cnbatch  
       2024-01-02 13:30:34 +08:00
    混合编程?可能无解,纯 C# 可以主动更改引用的 .NET Framework DLL ,已经有人试过可行:
    https://www.yycoding.xyz/post/2023/9/21/publish-dotnet-windows-application-into-a-single-file-executables

    对于混合编程的话,那就复杂多了。可以尝试把调用到的 DLL 全部复制到程序当前目录,但我也不知道是否可行。
    tanranran
        14
    tanranran  
       2024-01-02 14:01:09 +08:00
    再写一个项目,用于检测是否安装了.net framework ,如果没安装则,释放.net framework 安装文件,如果安装了,则释放项目安装文件
    chinadch
        15
    chinadch  
       2024-01-02 14:14:53 +08:00 via iPhone
    nsis 创建安装程序,知乎上有流程
    hahiru
        16
    hahiru  
       2024-01-02 14:40:51 +08:00
    !安装必看.txt
    Golor
        17
    Golor  
       2024-01-02 14:56:25 +08:00
    可以用 InnoSetup 打包程序,在 iss 脚本中进行判断是否安装.net freamwork ,若没有安装则进行安装。
    lskjdfgl
        18
    lskjdfgl  
    OP
       2024-01-02 15:14:14 +08:00
    @tanranran @Golor 谢谢 使用了 vs2010 自带的 visual studio installer 实现了安装前先检查有没有.net framework 环境,没有的话,就先安装.net framework ,安装后再复制程序文件。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3002 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:14 · PVG 21:14 · LAX 05:14 · JFK 08:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.