V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lskjdfgl
V2EX  ›  程序员

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

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

    请问我该如何实现这样的功能
    第 1 条附言  ·  116 天前

    20240102112551

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

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

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

    如何可以的话,考虑让 gpt 把 c#代码转换成 c++,就可以用一楼的方法解决了。
    tsanie
        7
    tsanie  
       116 天前
    或者可以选择.net core ,然后 publish 成 self-contained 的
    ysc3839
        8
    ysc3839  
       116 天前 via Android
    你先截图看看是 C++还是 C#吧
    zsxzy
        9
    zsxzy  
       116 天前
    nsis
    Cloutain
        10
    Cloutain  
       116 天前
    VC 程序还是.NET 程序都搞不清?或者是 VC 程序引用了.NET 的库?
    lskjdfgl
        11
    lskjdfgl  
    OP
       116 天前
    @lonewolfakela 项目有 vc++ 和 .net
    ![20240102112551]( https://i2.100024.xyz/2024/01/02/imq6i3.webp)
    lskjdfgl
        12
    lskjdfgl  
    OP
       116 天前
    @ysc3839 @Cloutain 已追加截图
    @tsanie @nuk 不是新建的 c#项目不能使用 .net core 和 publish
    cnbatch
        13
    cnbatch  
       116 天前
    混合编程?可能无解,纯 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  
       116 天前
    再写一个项目,用于检测是否安装了.net framework ,如果没安装则,释放.net framework 安装文件,如果安装了,则释放项目安装文件
    chinadch
        15
    chinadch  
       116 天前 via iPhone
    nsis 创建安装程序,知乎上有流程
    hahiru
        16
    hahiru  
       116 天前
    !安装必看.txt
    Golor
        17
    Golor  
       116 天前
    可以用 InnoSetup 打包程序,在 iss 脚本中进行判断是否安装.net freamwork ,若没有安装则进行安装。
    lskjdfgl
        18
    lskjdfgl  
    OP
       116 天前
    @tanranran @Golor 谢谢 使用了 vs2010 自带的 visual studio installer 实现了安装前先检查有没有.net framework 环境,没有的话,就先安装.net framework ,安装后再复制程序文件。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2761 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 12:00 · PVG 20:00 · LAX 05:00 · JFK 08:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.