1. 程式人生 > >vc++生成程式不需要.net執行環境的可以執行exe程式的方法

vc++生成程式不需要.net執行環境的可以執行exe程式的方法

Q:vc++編譯出來後自動產生了debug檔案裡面的.exe檔案不能直接開啟執行?
A:在新建VC++工程的時候,其中有一項是選擇將MFC庫作為共享的DLL還是靜態的DLL。
因為MFC程式在執行時需要一些DLL檔案的支援,你從整合開發環境下編譯執行時,有預設的路徑來呼叫這些所需的DLL,因此執行不會有問題。而當你單獨執行資料夾下的可執行程式時,如果一開始選擇的是作為共享的DLL,則就會因為可執行程式的當前路徑下沒有所需的DLL檔案而無法執行。
解決方法:
一種是使用打包程式,生成程式的安裝包,就像商業軟體一樣;
另一種就是採用作為靜態的DLL方式,即將程式要用到的庫整合到生成的exe程式中。這樣程式會稍稍大一點點,相當於一個
綠色軟體。你可以點選工程選單下設定選單項,常規選項卡,選擇作為靜態的DLL,重建工程就可以了;

在VS2005裡開發的VC++程式在編譯的時候,微軟預設會加入自己的 .Net Framework (方便推廣自家產品),讓你的VC++程式依賴它,這就導致程式編譯後無法跟往常一樣直接打包在別的機器就能正常執行。如果加入了.Net Framework ,安裝包就會非常大。

以下方法很好的解決了這個問題,通過以下兩種方法可以用VS2005將VC++程式編譯為不需要依賴.Net Framework環境就可以直接執行的程式了。

方法一:

1、右鍵專案-屬性

2、配置屬性-C/C++-程式碼生成

3、執行時庫-選擇/mt或者/mtd

 即 Multi-threaded (/MT)  或 Multi-threaded Debug (/MTd)      不要選 Multi-threaded DLL (/MD)  Multi-threaded Debug DLL (/MDd)

4、配置屬性-C/C++-常規

5、選擇在靜態庫中使用MFC

6、編譯執行即可

方法二:

在你的VS安裝目錄裡如下路徑     /Microsoft Visual Studio 8/VC/redist/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT     下找到下列檔案:      msVCm80d.dll     msVCp80d.dll     msVCr80d.dll     Microsoft.VC80.DebugCRT.manifest    把這幾個檔案拷貝到目標機器上,與你編譯後的可執行程式放置在同一資料夾,或者放到system32下,就可以讓目標機器執行該程式了。     2.VC++帶模板函式時能編譯不能連線,顯示連線錯誤“error LNK2019: 無法解析的外部符號”     解決方法:用模板的時候,把宣告和實現放在一個檔案裡。因為模板的機制決定了不可能把模板的CPP象其它方式(不用模板)一樣編譯成一個obj,資料型別都是程式中用到時才會知道的,這時連線的函式名也會因型別不同而不同,所以多數編譯器都要求寫在一個檔案中。     3.如果在VC++2005的程式中使用UNICODE字符集的API等函式,可以在專案屬性->配置屬性->字符集處選“使用UNICODE字符集”,如果只用ASCII碼,就選“未設定”即可!

相關推薦

vc++生成程式需要.net執行環境的可以執行exe程式方法

Q:vc++編譯出來後自動產生了debug檔案裡面的.exe檔案不能直接開啟執行? A:在新建VC++工程的時候,其中有一項是選擇將MFC庫作為共享的DLL還是靜態的DLL。 因為MFC程式在執行時需要一些DLL檔案的支援,你從整合開發環境下編譯執行時,有預設的路徑來呼叫這

利用Salamander .Net Linker生成可脫離.net framework環境執行程式

這是對上一篇文章: 驗證C#程式脫離.net framework環境執行(飛信法)的拓展,在文章的末尾,提到了飛信法的幾點不便,於是有網友提出了自己編寫loader的方法來解決,這當然是一個好方法,但是loader需要用能生成native型別程式碼的語言工具來編寫,如VC++

驗證C#程式脫離.net framework環境執行(飛信法)

原理: 利用飛信從Salamander .Net Linker  中提取出來的.net 2.0 VM來支援程式執行. 驗證步驟: 1,在VM虛擬機器上沒有.net環境的純淨xp系統中測試執行用VS2008編寫的"打字遊戲"程式,報錯提示"應用程式正常

cmd/bat如何自動請求管理員許可權而需要右鍵管理員執行

先上完整程式碼:   @echo off >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" if '%errorlevel%' NEQ '0'

VS2017 DLL動態庫使用教程【七】為什麼我的程式能在別人電腦執行

考慮一個很最最最簡單的程式: #include <stdio.h> #include <Windows.h> int main() { printf("你好\n"); system("pause"); return 0; } 將其編譯,得到一

Linux讓程式能被多次執行

讓程式單一執行讓程式不能被多次執行: 在某些時刻,我們想讓某個程式(守護程式)只執行一次,比如一個檔案正在被使用,就不能再被開啟,有兩種辦法實現。 1.當程式執行時在某個目錄下去建立一個”奇怪“的檔案(linux一切皆檔案),然後如果當這個進行要執行,就去檢測這個檔案

Tomcat部署專案需要重新啟動tomcat自動載入程式

1.找到tomcat路徑  D:\apache-myWebProject\apache-tomcat-7.0.69\conf 2.在conf檔案中開啟server.xml配置檔案,在</Host>中新增如下程式碼 <Context path="" r

一個需要Log4Net的寫日誌的簡單方法

filename stream lena creat test contex writer exists ndt 有些項目寫日誌時會選擇大名鼎鼎的Log4Net。而在我們使用它時,總會出現一些諸如版本不匹配而造成的寫日誌失敗的情況,還要改web.config,還要改Asse

誰說程式會告白?看神級程式設計師用Python怎麼製作熱門告白軟體!

  之前在抖音上看到了一個很火的小視訊,視訊上是一個很有意思的軟體,怎麼個有意思法呢?就是執行後問你是不是願意做我的女朋友,但你沒法點選到「不同意」!並且沒辦法直接關閉視窗! 這就很不正經,很流氓,很適合悶騷的我。 軟體的效果大概是這樣的:   &

ASP執行環境--.NetBox 軟體使用方法,怎樣使用.NETBOX執行asp專案?

一、建立 asp 執行環境   首先建立一個空的目錄,在你喜歡的位置,假設是 d:websvr。將 netbox.exe 複製到這個目錄,然後在目錄中建立一個檔案:main.box, 編輯其內容為:     Dim httpd Shell.Service.RunS

Windows 64位系統中安裝Android SDK“系統找到指定的檔案Java.exe”解決方法

首先請看這裡: http://blog.galois21.com/computer/galois21/2012_11_03/348 如果按照上面的步驟還無法解決。 那麼進入你自己的C:\Windows\System32目錄下,看看是不是有java.exe、javac.e

啟動虛擬機器會有錯誤報告:二進位制轉換與此平臺上的長模式相容。此虛擬環境中的長模式將被禁用,因此需要使用長模式的應用程式將無法正常執行

1.先安裝VMware2.常建立虛擬機器3.啟動虛擬機器,啟動會有:二進位制轉換與此平臺上的長模式不相容。此虛擬環境中的長模式將被禁用,因此需要使用長模式的應用程式將無法正常執行  解決辦法:需要開啟BIOS系統把  Intel  Virtual Technology 改為e

需要安裝任何開發環境,在瀏覽器裡面就能線上練習31種程式語言

如果有一天心血來潮,想試試和看看新的語言如何使用,總不可能每個開發環境都裝一套吧,而且有的開發環境還不太好裝,而且必須在特定的裝置下面才能使用,比如蘋果(Apple)公司的Swift語言. 就有下面的程式語言: Asm BCPL Bash C (clan

visual studio 2017 installer 安裝包製作過程出現的問題---此安裝程式需要.NET Framework 版本 3.5,請安裝該版本,然後重新執行此安裝程式,可以從Web獲得

visual studio 2017 installer 安裝包製作過程出現的問題---此安裝程式需要.NET Framework 版本 3.5,請安裝該版本,然後重新執行此安裝程式,可以從Web獲得.NET Framework 。要立即做此事嗎?     &nbs

ORB-SLAM2執行資料集時Pangolin介面卡住,生成軌跡以及用攝像頭執行非ROS版程式時如何退出的方法

問題1 最近用ORB-SLAM2執行KITTI資料集,最後Pangolin和ORB-SLAM2:Current Frame視窗卡住,無法儲存軌跡檔案。 看程式碼發現是SLAM.Shoutdown()的問題。 方法一: 如果想得到軌跡檔案,將SLAM.Shoutdown()移到SALM.S

裝mono,你的.NET程式照樣可以在Linux上執行

讓.NET應用程式在linux上執行,目前通用的做法就是在Linux上安裝mono,然後通過”mono your.exe“命令執行這個程式。 這種執行.net程式的辦法有兩個弱點,一個是需要客戶機安裝mono,二個是 ”mono xx.exe“ 這種命令列總讓人感到有點不太專業的味道。 那麼,有沒有辦法既

window下實現tomcat需要配置環境變數就可以直接執行startup.bat啟動

首先,確保你的jdk環境配置正常,cmd執行java-version,java,javac都有如下結果: 好了,到了這裡我們開始真正的配置: 開啟到各自tomcat下的bin目錄,找到startup.bat選中右擊編輯,在檔案開頭寫上下面兩行: SET JAV

.net程式在無.net環境執行

看了篇文章  測試了下竟然真的可以執行  測試環境是XP下  沒有裝NET2.0的情況下 可以執行的   不過需要每次輸入命令才能執行 點選後還是會報錯 原文如下 眾所周知,.net程式必須執行在.net framework環境下,這在很大程度上限制了.net程式的

問題解決“Windows Installer 程式包有問題,此安裝需要程式執行。請與您的支援人員或程式包開發商聯絡”

安裝或者解除安裝軟體時出現如下提示:Windows Installer 程式包有問題,此安裝需要的程式不能執行。請與您的支援人員或程式包開發商聯絡 解決方法: 1、按Win+R開啟執行,輸入service.msc回車,進入服務視窗; 2、檢視Windows Intaller

管理員許可權程式以普通使用者的許可權執行需要管理員許可權的程式

工作中碰到這樣的需求,A程式需要管理員許可權(也就是會彈UAC驗證),B程式不需要,現在B程式是通過A程式CreateProcess啟動的,發現其實B程式繼承了A的許可權,解決方法如下: DWORD GetProcessIL(DWORD u32_PID, DWORD* pu