![](/img/trans.png)
[英]Should I use Windows 8.1 SDK or Windows 10 SDK with Visual Studio 2017 for standard C++?
[英]Running Visual Studio 6 C++ in Windows 8.1
我最近將我的系統遷移到 Windows 8.1。 不幸的是,像其他人一樣,我無法再啟動 Visual Studio 6。 軟件在啟動時崩潰(閃屏)。
我知道有一些解決方法,可以在較新的 IDE 中使用 vc6 進行編譯,但這對我不起作用,因為我必須編譯大量項目,而且我無法一一修改所有項目文件。 ..
我已經看到了答案:vc6 太舊了,不支持等等......我知道這一切! 但是遷移大量代碼可能需要很長時間,目前我們沒有其他解決方案!
由於 vc6 在 Windows 8 上運行良好,我確信通過一些小技巧我們可以設法讓它在 8.1 下運行,但我還沒有弄清楚怎么做!
有沒有人設法在 Windows 8.1 上啟動 Visual Studio 6?
我找到了解決問題的簡單方法!
在找到這些有用的說明后,我在Windows 8.1上運行VS6很好:
http://blog.wavosaur.com/run-visual-c-6-on-windows-8/
確實,Windows 8在沒有這項額外工作的情況下保留了VS6的兼容性,但Windows 8.1卻沒有。 我希望這有幫助!
我發現了這個: http : //www.wavosaur.com/forum/run%20vc6%20with%20windows%208.1%20%28if%20msdev.exe%20crashes%29-t1362.html
我還沒有測試過,但我會盡快告訴你!
我已經用另一種方法成功了(類似於@szc982的方法):
在升級到 8.1 后,我迫切需要使用 VS 6 在我的 Win8 機器上繼續開發大型 MFC 應用程序。 我按照這里和其他地方的建議將 MSDEV.EXE 復制到具有不同名稱的文件中(我們稱之為 MSDEVX.EXE)並將新程序的兼容性設置更改為 Win 8.0。 不幸的是,當應用程序使用 HeapXxx API 或 CHttpFile 對象時,它作為被調試對象運行得非常緩慢。 我得出的結論是問題出在“容錯堆”墊片上。 我瘋狂地尋找一種擺脫 FTH 墊片的方法,最終我找到了一個:
我創建了另一個 MSDEV.EXE 副本——我們稱之為 MSDEVQ.EXE。 我安裝了應用程序兼容性管理器並按照說明創建了一個自定義數據庫,其中包含 MSDEVQ.EXE 的應用程序修復。 要創建設置,您可能認為您可以復制 MSWIN8 設置,然后減去 FTH 墊片。 唉,有一個錯誤會阻止您保存生成的數據庫。 微軟傲慢地說它不會修復這個錯誤,因為你永遠不需要復制兼容性設置。 好的,所以我一一復制了墊片,省略了作為 MSWIN8 一部分的 FTH 墊片。 我保存並安裝了生成的 .sdb 文件。 瞧! 沒有更多的 FTH 墊片,我又可以有效地調試了。
"C:\Program Files (x86)\Microsoft Visual Studio\Common\MSDev98\Bin"
MSDEV.exe
重命名為MSDEV-S.exe
(或任何其他名稱)——首先嘗試前面提到的名稱; 如果它不起作用,則使用MSDEV3-S.exe
或任何其他類似名稱。C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Visual C++ 6.0
Common\MSDev98\Bin
並運行MSDEV3-S.exe
。 如果這導致錯誤,然后重新運行,希望你會成功!這類似於 Francios 發布的內容,但您不需要更改目標。
另一個簡單的解決方案:
解釋:
Microsoft 安裝了兩個可執行文件MSDEV.EXE和MSDEV.COM ,其中一個可以在最近的 WINDOWS 版本中運行。 如果您在 shell 或腳本(例如 makefile )中啟動MSDEV ,您不想啟動COM而不是EXE ,使用不同名稱制作副本可以解決此問題。 (此外,如果您將 Microsoft 安裝的兩個文件保持原樣,則可以確保您沒有破壞任何現有功能)
當我使用生成文件進行構建時,這解決了我的問題,我將其更改為調用已更改為 XP 兼容性的副本。 請注意,在某些情況下,我確實需要使用原始的MSDEV.EXE ,因此最好同時使用兩者。
以管理員身份運行 MS-Dos並按照說明進行操作。
對於Windows 8.1 64bit ,鍵入:
ren "C:\Program Files (x86)\Microsoft Visual Studio\Common\MSDev98\Bin\MSDEV.EXE" MSDEV3.EXE
對於Windows 8.1 32bit ,鍵入:
ren "C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin\MSDEV.EXE" MSDEV3.EXE
現在轉到您的桌面並右鍵單擊任何空白區域然后選擇New -> Shortcut ,然后如果您有Windows 8.1 64bit將位置設置為: C:\Program Files (x86)\Microsoft Visual Studio\Common\MSDev98\Bin\MSDEV3.EXE
或者如果您有Windows 8.1 32 位,請將其設置為: C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin\MSDEV3.EXE
1 、刪除“DEVRES.PKG”文件,但會丟失資源編輯器。
或者
2.使用十六進制編輯器修補“DEVRES.PKG”中的緩沖區溢出。
// Microsoft Visual Studio 6.0
// Crash Fix (Buffer Overflow)
//
// Module: Resource Editor
// DEVRES.PKG v6.0.8168.0 - 17.6.1998 0:00
//
// Original SHA1 : 59afd55f13310dcdbfff777fe6f4c7d0a8191a82
// Fixed SHA1 : 00bb8497adca2467eaba022a34bf4fdafd3d7c6c
//
--------
0x00004518 / 0x50403518:
FF 25 74 1A 40 50 ; jmp ds:__imp_??2@YAPAXI@Z ; operator new(uint)
->
E9 8F 0F 10 00 90 ; jmp 0001054AC ; nop
--------
0x001054AC / 0x505044AC:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
->
55 89 E5 8B 45 08 B9 02 00 00 00 F7 E1 50 FF 15 74 1A 40 50 59 89 EC 5D C3
55 push ebp
89 E5 mov ebp,esp
8B 45 08 mov eax,DWORD PTR [ebp+0x8]
B9 02 00 00 00 mov ecx,0x2
F7 E1 mul ecx
50 push eax
FF 15 74 1A 40 50 call DWORD PTR ds:0x50401a74
59 pop ecx
89 EC mov esp,ebp
5D pop ebp
C3 ret
--------
0x000001E8:
AC 34 10 00
->
DC 34 10 00 ; increase .text section virtual size by 30 bytes
--------
0x00000140:
29 8D 19 00
->
77 FD 17 00 ; fix PE checksum
--------
Visual Studio 6 在新硬件上崩潰的真正原因實際上與您的操作系統無關,它在以后的 Windows 版本中也可以正常工作,但是資源編輯器模塊 (DEVRES.PKG) 中存在多個緩沖區溢出,這些似乎沒有引起注意這些年來。
資源編輯器模塊多次調用C++ new[] 運算符,使用的值太小而沒有進行邊界檢查。 但是由於內存分配和對齊的工作方式,它總是“幸運”並且沒有崩潰,因為指針內存塊具有比請求更多的“額外”空間,然后它沒有被其他任何東西覆蓋或訪問操作完成。
從那以后發生的變化是計算機的每個部分都變得更快了。 處理器、內存、I/O、工程。 2000 年代初期沒有 16 核 32 線程處理器,也沒有 5000MB/s 的 SSD 或快速內存。 因此,現在在現代處理器上運行時,會發生資源編輯器未正確分配的內存,在仍在使用時被另一個線程覆蓋(是的,VS6 是多線程的,即使非常輕微)。
這也是為什么各種不同的技巧可以“修復”它的原因,它們的共同點是它們會稍微改變執行路徑(通過減慢處理速度和/或改變內存的分配/對齊方式)幸運的是,您通過了緩沖區溢出而不會崩潰。 兼容性層會減慢它的速度,就像在 VM 中運行它一樣。 從 HDD 而不是 SSD 運行它可以有所作為,更改文件夾,重新啟動計算機,甚至在后台運行 4K 視頻流。
我知道現在是 2022 年,但我不認為 Visual Studio 6 今天的用處比以往任何時候都小。 與所有新版本相比,資源編輯器仍然是最好的,即使我在 VS2019 中編寫了一些代碼,我仍然使用 VC6 中的編輯器來設計對話框。 此外,如果您只想編寫一個可以在任何 Windows 版本中運行而無需任何可再發行組件的快速工具,VC6 仍然是首選。
無論如何,有兩種方法可以永久修復崩潰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.