我想隱藏我的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