我想隐藏我的EXE文件,它是VB代码,所以我想我可以但它在一个VC++代码中,然后我可以从VC++代码调用它,如运行(myfile.exe)或执行(myfile.exe)。 但我不知道如何将它添加到VC++中!如何在VC++ EXE程序中嵌入一个EXE文件
回答
你可以使用Resources。
有2个阶段,你需要的工作:
- 编译时间:构建C++应用程序时,你必须指示的Visual Studio包括(嵌入)的VB可执行文件(我将它命名为resource.exe)作为资源输入到项目输出(它生成的可执行文件为C++); (当然),为您需要有VB可执行文件在构建时
- 运行时间:你C++应用程序必须能够从自身获取资源,将其保存到一个文件,并执行它。
这是我测试过的原型(和它的工作原理)。有迹象表明,你需要在你VStudio包括(我用的10.0版本(2010))项目3个文件:
res.h - 只是一个常量定义文件,双方被列入其他文件。将其包含在头文件中。
#define EXE_NAME "resource.exe" #define RES_TYPE_UNQUOTED RAW #define RES_NAME_UNQUOTED EXECUTABLE
exe.rc - 这是资源文件(如简化为可能的)。将其纳入资源文件。 注意:试图从编辑它VStudio将失败,因为资源编辑器期望该文件包含一些废话(默认情况下插入VStudio)。
#include "res.h" RES_NAME_UNQUOTED RES_TYPE_UNQUOTED EXE_NAME
的main.c - 主代码文件。将其纳入源文件。它从自身加载资源,将其保存到文件中,然后尝试执行该文件。我使用了注释代码进行调试,不再需要,但我仍然将它留在那里。 注意这只是一个例子,代码可以写得更好(例如错误处理,资源组织等),我专注于有一些工作。
#include <stdio.h> #include <Windows.h> #include "res.h" #define STRINGIFY(X) #X #define QUOTE(X) STRINGIFY(X) #define RES_TYPE QUOTE(RES_TYPE_UNQUOTED) #define RES_NAME QUOTE(RES_NAME_UNQUOTED) /* #define NULL_STR "null" BOOL CALLBACK EnumResNameProc(_In_opt_ HMODULE hModule, _In_ LPCTSTR lpszType, _In_ LPTSTR lpszName, _In_ LONG_PTR lParam) { if (IS_INTRESOURCE(lpszName)) printf(" ResourceName(int): [%d]\n", lpszName); else { printf(" ResourceName(str): [%s]\n", lpszName ? lpszName : NULL_STR); printf(" Resource addr: %08X\n", (long)FindResource(NULL, lpszName, lpszType)); } return TRUE; } BOOL CALLBACK EnumResTypeProc(_In_opt_ HMODULE hModule, _In_ LPTSTR lpszType, _In_ LONG_PTR lParam) { if (IS_INTRESOURCE(lpszType)) printf(" ResourceType(int): [%d]\n", lpszType); else printf(" ResourceType(str): [%s]\n", lpszType ? lpszType : NULL_STR); EnumResourceNames(NULL, lpszType, EnumResNameProc, lParam); return TRUE; } //*/ int main() { HANDLE fp = NULL; HRSRC res = NULL; HGLOBAL global = NULL; char *buf = NULL; DWORD size = 0, written = 0; int ret = -1; /* EnumResourceTypes(NULL, EnumResTypeProc, NULL); printf("[%s][%s]\n", RES_NAME, RES_TYPE); //*/ if ((res = FindResource(NULL, RES_NAME, RES_TYPE)) == NULL) { printf("FindResource error: %d\n", GetLastError()); return 1; } if ((global = LoadResource(NULL, res)) == NULL) { printf("LoadResource error: %d\n", GetLastError()); return 2; } if ((size = SizeofResource(NULL, res)) == 0) { printf("SizeofResource error: %d\n", GetLastError()); return 3; } if ((buf = (char*)LockResource(global)) == NULL) { printf("LockResource error: %d\n", GetLastError()); return 4; } if ((fp = CreateFile(EXE_NAME, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL , NULL)) == INVALID_HANDLE_VALUE) { printf("CreateFile error: %d\n", GetLastError()); return 5; } if (WriteFile(fp, buf, size, NULL, NULL) == FALSE) { printf("WriteFile error: %d\n", GetLastError()); CloseHandle(fp); return 5; } CloseHandle(fp); ret = system(EXE_NAME); printf("system returned %d\n", ret); return 0; }
能否请你通过链接向我发送源代码和文件,我将不胜感激 –
嗯,我不知道该怎么做。但是你需要做的就是创建我枚举的3个文件,并复制/粘贴我发布的相应代码块。 – CristiFati
只需使用Dropbox或谷歌驱动器上传 –
- 1. 将现有的exe文件嵌入到另一个程序中
- 2. 将config.ini嵌入exe文件
- 3. 嵌入exe文件到C#
- 4. VC++ exe文件被删除?
- 5. 嵌入文件到EXE文件在VB6
- 6. SharpDevelop - 如何嵌入,编译EXE文件与DLL的程序集?
- 7. 嵌入式ConfigFile实现EXE文件中
- 8. 硒:将chromeDriver嵌入到一个exe中
- 9. 在C#控制台中嵌入一个exe文件?
- 10. 将清单嵌入到exe文件中
- 11. Visual Studio 2008 VC++(.exe文件)中的单元测试程序
- 12. 如何在jsp页面中嵌入应用程序(.exe等)
- 13. 如何在C#Windows窗体应用程序中运行嵌入式.exe文件?
- 14. Winforms控制台应用程序,我如何在exe文件中嵌入图标?
- 15. 在html中嵌入.exe
- 16. 在wxpython中嵌入.exe
- 17. 如何在signtool.exe中将散列嵌入到exe文件中
- 18. 将所有文件嵌入到一个exe中
- 19. 如何将文件嵌入到exe文件中?
- 20. 运行exe文件,除非使安装(嵌入DLL到EXE)
- 21. Spring Boot嵌入式Tomcat应用程序作为Windows EXE文件
- 22. 如何更改exe文件在vb.net中的嵌入式设计
- 23. 如何运行一个EXE文件依赖于另一个EXE文件运行
- 24. 嵌入.exe与普通文件
- 25. 在C程序中调用.exe文件
- 26. 在WPF EXE中嵌入多个图标
- 27. 如何调用.Net程序集中的嵌入式资源的exe文件?
- 28. WPF将.net库嵌入exe文件
- 29. 注入dll到exe文件
- 30. 将项目的exe文件嵌入到另一个项目的exe文件中并保持其最新版本
有什么建议? –
我的答案解决了你的问题吗? – CristiFati