我希望能夠分發用戶可以配置爲以32位或64位方式運行的一個版本的可執行文件。該服務將有一個32位的主機進程,用於讀取配置並啓動32或64位的新進程。我沒有確定的是如何/如果針對任何CPU的可執行文件可以在64位Windows下作爲32位進程啓動。在64位Windows上以32位進程啓動MSIL exe
回答
這沒有什麼意義。如果您的應用程序可以作爲32位進程運行,並且不需要額外的虛擬內存空間,那麼將它作爲64位進程運行就沒有意義了。
你也不能輕易控制它。它需要更改.exe標頭中的值。 Corflags.exe實用程序可以執行此操作,但不能分發它。自己砍頭是技術上可行的,但很難很難 fugly。最終的障礙是,您通常不具有在正確安全的機器(例如UAC)上修改.exe文件所需的寫入權限。如果你真的需要這樣做,那麼只需部署兩個副本的.exe
這可以通過編寫一個非常小的引導程序.exe來完成。它所需要做的就是Assembly.Load()主要的.exe,並調用它的Program.Main()方法。構建它的兩個版本。
定位任何CPU意味着您的目標是構建機器的操作系統。因此,如果您的構建機器是32位的,那麼任何CPU將構建一個32位輸出,並且如果您的構建機器是64位,那麼您將獲得64位輸出。這與您部署到的機器無關。
爲了達到你想要做的,你真的需要2個exe副本,一個是32位版本,另一個是64位版本。您可以通過將目標平臺分別設置爲32位和64位來完成此操作。再一次,如果您的目標是任何CPU,Visual Studio將選擇構建機器上當前的任何操作系統。
將任何一個CPU目標庫加載到32位進程中將生成32位。所以64位機器*可以*構建32位代碼。我只是想知道是否有可能在新的過程中強制這一點。 – dmo 2010-08-13 18:34:16
這就是我的觀點,它會**構建**,這意味着輸出二進制將是32位或64位,從來都不是。因此,如何以32位進程的形式啓動64位構建的二進制文件?唯一的辦法是同時擁有32/64位版本和每個配置文件啓動一個版本。 – code4life 2010-08-13 21:25:25
MSIL在運行時編譯爲本地代碼(32位或64位)。問題是如何指導要構建的64位操作系統。如果項目編譯爲明確的32位或64位,則運行時將尊重該項目。如果在正在運行的進程中加載,它將嘗試使用與託管進程相同的方式。 .NET二進制文件被編譯爲MSIL,因此它們可以在任何主體中運行。 – dmo 2010-08-13 22:22:38
- 1. 在Windows 7 64位機器上將32位exe轉換爲64位exe
- 2. 啓動64位進程修改32位和64位.NET machine.config中
- 3. 如何從32位代碼啓動64位Windows進程?
- 4. 32位cmd.exe如何在Windows Server 2003 x64上啓動64位cmd.exe?
- 5. 在64位操作系統上啓動32位進程
- 6. 通過OLE派遣從64位exe啓動32位exe
- 7. 如何從32位或64位進程啓動64位PowerShell進程?
- 8. 如何從32位進程啓動64位進程
- 9. 64位OS/32位進程
- 10. 從32位應用程序啓動64位進程?
- 11. 從32位應用程序啓動64位應用程序?
- 12. 32位nasm程序集不在64位系統上啓動
- 13. 在32位程序中使用64位驅動程序。 Windows
- 14. Windows 7(64位)上的IIS 7和Ms Access 32位32位
- 15. GetModuleFileNameEx對32位進程從Windows 64位進程10
- 16. 在Windows 7 64位上使用Java 32位的Eclipse 32位
- 17. 可以在Windows上將32位DLL加載到64位進程中嗎?
- 18. MySQL 32位或64位 - Apache 32位Windows 64位?
- 19. 32位NSIS可以啓動64位程序嗎?
- 20. Windows上的Perl:32位或64位?
- 21. 64位Windows 2008上的32位cluster.exe
- 22. 32位/ 64位Windows/Linux應用程序
- 23. 在64位Windows上進行Python 32位開發
- 24. 如何獲得Microsoft Access 2007 32位以在Windows 7 64位上顯示64位ODBC驅動程序?
- 25. Windows 7 64位不正確PATH當加載32位庫的32位exe
- 26. Pyinstaller,如何在32位Linux上製作32位和64位.exe文件?
- 27. Windows 64位操作系統上的32位或64位Android SDK?
- 28. 從32位進程調用64位DLL上的LoadLibrary
- 29. 從32位Windows應用啓動64位可執行文件
- 30. 端口32位Windows驅動程序到64位Windows
我知道它可以強制這種方式,這是行不通的。對於大多數用途而言,64位將是首選,但對於某些向後兼容性場景,可能需要32位。部署2個副本是默認位置,但我希望有另一種方法。 – dmo 2010-08-13 19:13:46
所有你需要的是一個非常麻煩的引導程序EXE。它可以Assembly.Load()主EXE並調用它的Program.Main()方法。 – 2010-08-13 19:31:52
謝謝,漢斯 - 這可能是一個合理的方法。 – dmo 2010-08-13 22:23:35