C++ 如何将我的程序转换为可以安装的程序?

C++ 如何将我的程序转换为可以安装的程序?,c++,visual-c++,C++,Visual C++,如何将我的VC++2008程序转换成可以在其他计算机上运行的程序。我尝试过在调试中使用它生成的.exe,但它会说我丢失了一些文件,并列出了我所有的.cpp文件名和.h文件(如果我在其他计算机上使用它)。我想要一些东西,这样我可以加密我的文件,因为其中一个是关于加密密码/其他东西的,所以我不能让别人直接打开我的文件。另外,我非常想让他们接受条款和条件,这样他们就不会在失去什么东西时起诉我,那将是非常好的^^ 我从他们的网站上只得到了微软虚拟C++ 2008 Express版。 o如果我在windo

如何将我的VC++2008程序转换成可以在其他计算机上运行的程序。我尝试过在调试中使用它生成的.exe,但它会说我丢失了一些文件,并列出了我所有的.cpp文件名和.h文件(如果我在其他计算机上使用它)。我想要一些东西,这样我可以加密我的文件,因为其中一个是关于加密密码/其他东西的,所以我不能让别人直接打开我的文件。另外,我非常想让他们接受条款和条件,这样他们就不会在失去什么东西时起诉我,那将是非常好的^^

我从他们的网站上只得到了微软虚拟C++ 2008 Express版。


o如果我在windows 7上制作了一些东西,它会在xp或vista中运行吗?

如果您在Win 7中使用.NET 3.5进行编译,它也应该在xp和vista中运行
(前提是安装了.NET 3.5 framework)。

如果您在Win 7中使用.NET 3.5进行编译,它也应该在xp和vista中工作
(前提是安装了.NET 3.5 framework)。

您需要在另一台计算机上运行二进制文件(如果尚未安装包)

您需要在另一台机器上运行二进制文件(如果尚未安装包)

您需要创建一个生成MSI的部署项目,但我不确定您的Express edition是否能做到这一点。至于加密,编译并不能做到这一点,没有任何东西可以阻止人们分解代码。最后,您可能不应该编写自己的加密算法,因为大多数人在大多数情况下都会出错。使用开箱即用的工具。

您需要创建一个生成MSI的部署项目,但我不确定您的Express edition是否能做到这一点。至于加密,编译并不能做到这一点,没有任何东西可以阻止人们分解代码。最后,您可能不应该编写自己的加密算法,因为大多数人在大多数情况下都会出错。使用开箱即用的东西。

您通常不能也几乎不应该将调试版本分发到客户机。至少有三个原因

  • 客户端计算机将不会有依赖库的调试版本,如VC运行时(msvcrdt.dll),因此它们将无法运行您的应用程序
  • 在调试中编译时,您的代码在许多方面都会以未优化的方式运行。首先,当您在调试中编译时,您不会让优化编译器进行优化,因此它会运行得更慢和/或更胖。另一方面,还有像
    operator new
    这样的调试版本,它的分配比您要求的要多,用于运行时完整性检查等。因此,您的程序再次运行得更胖、更慢
  • 在调试中编译时,对代码进行反向工程更容易
  • 更新:


    要回答您的问题,如果Win7编译的应用程序将在XP/Vista上运行,答案是“是”,只要您不使用任何Win7功能。

    您通常不能也几乎不应该将调试版本分发到客户端计算机。至少有三个原因

  • 客户端计算机将不会有依赖库的调试版本,如VC运行时(msvcrdt.dll),因此它们将无法运行您的应用程序
  • 在调试中编译时,您的代码在许多方面都会以未优化的方式运行。首先,当您在调试中编译时,您不会让优化编译器进行优化,因此它会运行得更慢和/或更胖。另一方面,还有像
    operator new
    这样的调试版本,它的分配比您要求的要多,用于运行时完整性检查等。因此,您的程序再次运行得更胖、更慢
  • 在调试中编译时,对代码进行反向工程更容易
  • 更新:


    <> P>并回答你的问题,如果Win 7编译的应用程序将运行在XP/Vista上,答案是“是”,只要你不使用任何Wi7特性。

    < P>第一部分已经被回答(发布构建,包括可再分布C++ +DLL)。 第二部分,在Vista/XP上运行并不是那么简单

    <>如果你编写一个纯C++程序,它将无条件地运行在XP和Vista上。但一旦包含
    ,就会引入对最低Windows版本的依赖。今天的默认值仍然是XP。这意味着您不能直接使用任何Vista或W7功能,因此您的程序可以在XP上运行

    但是如果在包含
    之前定义WINVER 0x0600,则可以使用特定于Vista的函数。使用这些Vista功能的代价是,你的程序将不再在XP上启动。类似地,
    #define WINVER 0x0601
    还允许您在XP和Vista功能的基础上访问Windows 7功能。同样,使用Windows7功能会阻止您在XP或Vista上运行


    如果Windows 7功能可用,可以使用一些技巧。基本上,它们都归结为调用<代码> GETPROCEDATION(“SoHyWORKOWS7BY函数”)< /C> >,并以某种方式处理返回null的情况。

    < P>第一部分已经回答(释放构建,包括可再分布C++ +DLL)。 第二部分,在Vista/XP上运行并不是那么简单

    <>如果你编写一个纯C++程序,它将无条件地运行在XP和Vista上。但一旦包含
    ,就会引入对最低Windows版本的依赖。今天的默认值仍然是XP。这意味着您不能直接使用任何Vista或W7功能,因此您的程序可以在XP上运行

    但是如果在包含
    之前定义WINVER 0x0600,则可以使用特定于Vista的函数。使用这些Vista功能的代价是,你的程序将不再在XP上启动。类似地,
    #define WINVER 0x0601
    还允许您在XP和Vista功能的基础上访问Windows 7功能。同样,使用Windows7函数会阻止您运行