2010-02-04 5 views
0

VC++ 2008 프로그램을 다른 컴퓨터에서 실행할 수있는 방법으로 전환하는 방법은 무엇입니까? 디버그에서 만든 .exe를 사용하려고했지만 일부 파일이 누락되었다고 말하고 내 .cpp 파일 이름과 .h 파일을 모두 나열합니다 (다른 컴퓨터에서 사용하는 경우). 나는 그 중 하나가 암호/다른 것들을 암호화하기 때문에 내 파일을 암호화 할 수 있도록 뭔가를 원했습니다. 그래서 누군가 내 파일을 열어 볼 수 없었습니다. 또한 나는 그들이 뭔가를 잃으면 나에게 고소 할 수 없도록 계약 조건을 받아들이도록 아주 많이하고 싶다. 아주 좋을 것이다. ^^어떻게 프로그램을 설치할 수있는 프로그램으로 바꿀 수 있습니까?

저는 웹 사이트에서 가져온 Microsoft 가상 C++ 2008 익스프레스 에디션 만 있습니다.

o 또한 Windows 7에서 무언가를 만들면 XP 또는 Vista에서 실행됩니까?

+0

시도하고있는 다른 컴퓨터에 MSVC 런타임이 설치되어 있습니까? – mingos

+0

설치 프로그램이 필요합니다. 사용권 계약을 통해 사용자를 클릭하게하는 것이 표준 기능입니다. 런타임 DLL이 설치되는 중입니다. 익스프레스 에디션은 이런 종류의 기능을 제공하도록 설계되지 않았으며 단지 학습 용 에디션 일뿐입니다. –

+0

: | 오 .. 그래서 내가해야 겠어. 전체 C++ 프로그램 ..? 컴퓨터를 실행하기 위해 tryed를 실행하려면 xp이고 다소 오래되었으므로 미안하다는 것은 모르겠다. T_T – blood

답변

1

은 일반적으로 클라이언트 컴퓨터에 디버그 빌드를 배포 할 수 없습니다. 적어도 세 가지 이유가 있습니다.

  1. 클라이언트 컴퓨터는 VC 런타임 (msvcrtd.dll)처럼 종속 라이브러리의 디버그 버전을 가지고 있지 않습니다, 그래서 그들은 당신의 응용 프로그램을 실행할 수 없습니다.
  2. 디버그에서 컴파일 할 때 코드가 여러 가지면에서 최적화되지 않은 상태로 실행됩니다. 우선, 최적화 컴파일러가 디버그에서 컴파일 할 때 최적화하지 않도록하여 느리고 및/또는 더 매끄럽게 실행됩니다. 또 다른 한가지는 operator new과 같은 디버그 버전이 있습니다. 을 많이 묻습니다. 런타임 무결성 검사 등에 사용됩니다. &은 한 번 더 느리게 실행됩니다.
  3. 디버그에서 컴파일 할 때 코드를 리버스 엔지니어링하는 것이 더 쉽습니다.

업데이트 :

그리고 Win7에 컴파일 된 응용 프로그램은 XP/Vista에서 실행하는 경우 귀하의 질문에 대답하기 위해, 대답은 '예'그래서 당신이 어떤 Win7에 기능을 사용하지 않는 것입니다.

0

Win 7에서 .NET 3.5를 사용하여 컴파일하는 경우 xp 및 vista에서 작동해야합니다. (.NET 3.5 프레임 워크가 설치된 경우).

+0

나는 Visual Studio의 익스프레스 에디션을 사용하여 앱을 쉽게 재배포 할 수 있다고 생각하지 않습니다 ... 거기에 몇 가지 도구가 있지만 앱에 필요한 라이브러리가 무엇인지 알아야합니다. 이 스레드보기 : http://social.msdn.microsoft.com/Forums/en/Vsexpressvc/thread/af1b898e-d882-4695-b0d0-09e3285436e2 – aggietech

+0

InstallSheid : | 내가 그것에 대해 들었지만 돈이 들까 요? 나는 자유 소프트웨어를 만들고 있었다. 그래서 나는 정말로 돈을 지불하고 싶지 않았다. 새로운 것을 계속 만들어야하기 때문에 그것을 계속 업데이트하려고했기 때문에. – blood

1

바이너리가 다른 컴퓨터에서 실행되도록하려면 (팩이 아직 설치되어 있지 않은 경우) redist pack이 필요합니다.

+0

오른쪽. 일반적으로이를 배치 프로젝트에 병합 모듈로 추가합니다. 아니면 RTL에 정적으로 링크하여이를 피할 수 있습니다. –

+0

^^ tyvm, 매우 도움이되는 링크를 추가하는 것이 좋습니다. – blood

1

MSI를 생성하는 배포 프로젝트를 만들어야하지만 Express Edition이이를 수행하는지 잘 모르겠습니다. 암호화에 관해서는 컴파일은 그렇게하지 않으며 사람들이 코드를 분해하는 것을 막을 방법은 없습니다. 마지막으로, 대부분의 사람들이 대부분의 시간을 잘못 이해하기 때문에 자신의 암호화 알고리즘을 작성해서는 안됩니다. 상자에서 꺼낸 것을 사용하십시오.

+0

: | 잘못 ... 나는 무엇을하고 있는지 알지. 대부분. 그것은 학교를위한 다소 프로젝트이고 나는 항상 이렇게하고 싶었습니다 : | 타이 ..하지만 .. – blood

0

첫 번째 부분은 이미 답변되었습니다 (릴리스 빌드, 재배포 가능 C++ DLL 포함).

Vista/XP에서 실행되는 두 번째 부분은 그다지 간단하지 않습니다.

순수 C++ 프로그램을 작성하면 무조건 XP 및 Vista에서 실행됩니다. 그러나 <windows.h>을 포함하면 최소한의 Windows 버전에 대한 의존성이 생깁니다. 오늘 기본값은 여전히 ​​XP입니다. 즉, Vista 또는 W7 기능을 직접 사용할 수 없으므로 프로그램이 XP에서 실행될 수 있습니다.

#define WINVER 0x0600 앞에 <windows.h>을 포함하면 Vista 관련 기능을 사용할 수 있습니다. 에 대해 지불하는 대가로 Vista 기능을 사용하면 프로그램이 XP에서 더 이상 시작되지 않습니다. 마찬가지로 #define WINVER 0x0601은 XP 및 Vista 기능 위에 Windows 7 기능에 대한 액세스를 제공합니다. 또한 Windows 7 기능을 사용하면 XP 또는 Vista에서 실행을 중지 할 수 있습니다.

가능한 경우 Windows 7 기능을 사용할 수있는 몇 가지 트릭이 있습니다. 기본적으로 이들은 모두 GetProcAddress("some_windows7_function")을 호출하고 NULL을 반환하는 경우를 처리합니다.

관련 문제