【问题标题】:Programming for Windows with no redistributable没有可再发行的 Windows 编程
【发布时间】:2012-12-14 07:59:55
【问题描述】:

这可能是一个愚蠢的问题,但我在谷歌上搜索的所有尝试都失败了。问题是:如何开发不需要预安装可再发行组件的 Windows 应用程序?我想创建在不包含 .NET Framework 或类似内容的旧版本 Windows 下也可以运行的应用程序。

谢谢你,eWolf

【问题讨论】:

  • @Lasse:不,因为它需要一个可再发行组件。 @All:感谢您的回答!我现在要开始学习 C++ 了。我面前有一本厚厚的书,应该也是为完全的初学者准备的,但是在第一章中,它已经使用了大量的表达方式,我只能理解,因为我已经可以开发了使用 C# 和 PHP .. :D

标签: windows programming-languages redistributable


【解决方案1】:

首先,使用母语编程,例如 C++,没有 CLR。​​

其次,禁用清单并避免链接外部 DLL(例如 STDC 或 MFC)。

【讨论】:

  • 所以 C++ 不需要可再发行组件?最近,一些软件在我的电脑上安装了“Microsoft Visual C++ Redistributable”。你什么时候需要那个组件?
  • 您在使用 C++ CLI(也称为“托管 C++”)进行编程时需要它,它是一种类似于微软 C++ 的语言,实际上是 C++ 和 C# 的混合体。
  • 如果应用程序被编译指定链接器使用 CRT 的 dll 版本,则需要使用比 6 更新的 Visual C++ 版本;另一种选择是在应用程序中静态链接 CRT,但最终的 exe 大小会增长。
  • 我只想指出,Matteo Italia 在 cmets 中为您的问题提供了正确答案。如果您正在使用 Visual C++ 开发应用程序并且不想安装额外的 DLL(Visual C++ 运行时也称为 CRT),您应该将项目配置为静态链接到 CRT。
【解决方案2】:

旧版本的 Windows 是什么意思?
自 Windows 2003 和 .net 1.1 以来,.net 框架就是 Windows 的一部分。
因此,如果您的目标是比 Windows 2003 更新的 Windows 版本,您可以确定 .net 可用。

还有一些解决方案,即automate linking/packaging 的 .net 产品,这样您就不需要运送任何可再发行产品等。

更新:
我刚刚发现Mono 允许您将整个运行时链接到您的可执行文件中。
他们称该功能为 Bundle
阅读更多关于 here 的信息。

【讨论】:

  • 也许他的意思是旧的,如在 Win9x 或 Windows 2000 中,根本无法保证 .NET 的存在。
  • 可能,但他用 .net 和可再发行标记了这个问题。因此,我们讨论了具有某种 .net 支持的平台。
  • 如果我为 .NET 开发,那么为最新版本。如果 .NET 1.1 可用,它对我没有多大帮助...
  • “最新版本”是 3.5,仅随 Windows 7 提供。因此您必须在 1. 无先决条件 && 旧 .net 版本 -- 或 -- 2. 可再发行 && 新框架功能之间做出决定没有任何要求的旧 Windows 上的新 .net 会很好。但那是在方圆。您还可以查看 Mono 的 Bundle 机制。 (请参阅我的回答中的更新)根据常见问题解答,与 .net 相比,Mono API 的状态是“介于 .NET 2.0 和 .NET 3.5 之间”。
【解决方案3】:

使用 Delphi - 尽管 IDE 的较新版本存在一些奇怪的错误,但创建不需要可再发行组件的本机 Windows 应用程序很容易。比 C++/win32 更容易使用。

【讨论】:

  • 您可能是对的,但 C++ 是一种通常似乎值得学习的语言。当然这并不容易,但我认为它非常快。
  • 如果这只是一个学习练习,那么你当然可以做你喜欢的。我怀疑 C++ 应用程序和 Delphi 应用程序之间存在显着的速度差异,因为 Delphi 允许您非常接近裸机,就像 C++ 一样。区别在于开发时间 - 在 Delphi 中开发 GUI 比在 C++ 中开发更快、更容易。
  • 如果您打算使用 C++,您可以使用 C++Builder,它是同一 IDE 的一部分(如果您购买 RAD Studio 产品)。它还可以在没有任何可再分发要求的情况下生成应用程序。 (我曾经与一位网络管理员打赌,要编写一个 Windows 应用程序,该应用程序无需安装即可从 1.44MB 软盘运行,并通过 WinAPI 从他的数据库服务器计算机中检索信息;我使用 Delphi 2 完成了这件事,并在赌注中收集了信息。 )
  • @ken: Cool ;) 它是什么样的数据库?
【解决方案4】:

编辑:正如 eWolf 指出的那样,他不需要 .NET,尽管最初的问题标记为 .NET。

简而言之,一些老机器比如Win95/98/2000可能没有安装运行时。由于您指定了 .NET,我假设您想使用 .NET 构建应用程序,但是,您需要事先安装 .NET 运行时才能执行 .NET 应用程序。您可以通过两种方法轻松解决此问题:

  • 手动安装 .NET 运行时或
  • 使用可以检测是否安装了 .NET 运行时的自定义安装程序脚本来安装 .NET 运行时可再发行组件。

如果您在谈论诸如 C/C++ 之类的本机应用程序,最好的方法是(避免依赖并最大限度地减少所需的 DLL 数量)在原始 WinAPI32 中开发它,只使用标准 DLL 很多Windows 机器将拥有 COMMCTRL.DLL、USER32.DLL、ADVAPI.DLL 等等。最终结果将是一个更小的可执行文件。当然,您可以通过将 DLL 静态链接在一起形成一个庞大的可执行文件来捆绑其他 DLL。

【讨论】:

  • 不,我不想使用 .NET 构建应用程序,因为这需要运行时——我不想要。我对原生应用感兴趣。
  • @eWolf:好的。您可以相应地编辑您的标签,因为您将其标记为 .NET 我也会相应地编辑我的答案。
  • 哦,对不起,我不想添加 .NET 标记。已更正它。
【解决方案5】:

我推荐你使用WTL,它是一个轻量级的 C++ 框架。它实际上仅比 Win32 API 高出一步,因此您可以获得具有很少依赖关系的小型 EXE。 WTL 需要您可以静态链接到的 ATL 框架,这意味着您只需要发布您的 EXE。

另一个值得关注的框架是Qt。但是,这确实需要您在应用程序中提供一些 DLL。 Qt 是一个很棒的框架,我认为您会发现它比 WTL 更有效率(当然取决于您的应用程序需求。)

【讨论】:

  • 这听起来很有趣。您会为 C++ 推荐哪种环境?我应该使用 Visual C++ 还是 gcc?是否有某种形式的设计器可用?
  • 我还发现 SmartWin++ 工具包很有趣,尽管它的开发几年前就停止了。
  • 如果您选择 WTL,请使用 Visual Studio。如果您选择 Qt,那么他们有一个出色的 C++ IDE(带有表单编辑器),称为 Qt Creator。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-31
  • 1970-01-01
相关资源
最近更新 更多