Tôi muốn chương trình của mình chạy ở chế độ 32 bit nếu trong hệ điều hành 32 bit hoặc ở chế độ 64 bit nếu nó ở trong hệ điều hành 64 bit. Chương trình đó được tạo ra với Bat To Exe Converter v2.1.4, do đó, nó cơ bản là một tập tin thực thi. Thông thường khi tôi chạy một tập tin thực thi trên một hệ điều hành 32 bit nó chạy ở chế độ 32 bit và khi tôi chạy nó trên một hệ điều hành 64 bit nó chạy ở chế độ 64 bit, phải không? Vấn đề là, bằng cách sử dụng Bat To Exe Converter v2.1.4 Tôi có thể chọn nếu chương trình là 32 hoặc 64 bit. Vì vậy, tôi phải chọn 32 hoặc khác tôi không nghĩ rằng nó sẽ chạy trên một hệ điều hành 32 bit. Tôi đã thử sử dụng các tệp .vbs để khởi chạy lại chương trình bằng cách sử dụng .Run và .ShellExecute nhưng kết quả là kiến trúc giống với cấu trúc được đặt trong bộ chuyển đổi. Tôi cũng đã thử cmd /c
và %WINDIR%\System32\cmd.exe /c
và cũng %WINDIR%\SysWOW64\cmd.exe /c
nhưng tôi không thể tìm thấy cách để thực hiện. Tôi sử dụng Windows 8.0 x64 và máy ảo của tôi là Windows 8.1 x64.Cách chạy tập tin batch ở chế độ 64 bit từ một tập tin batch ở chế độ 32 bit
Trả lời
c:\windows\sysnative
Cấp quyền truy cập vào System32 cho các chương trình 32 bit.
32 Bit
C:\Windows\System32 accesses syswow64
c:\windows\sysnative accesses System32
64 Bit chỉ làm những gì đang nói, truy cập vào các thư mục trực tiếp - ví dụ như C: \ windows \ system32 truy cập System32 và C: \ Windows \ SysWOW64 truy cập SysWOW64.
Vấn đề là bạn chỉ nên viết chương trình 32 bit. Các chương trình 64 bit chủ yếu là 32 bit trong nội bộ (chỉ các địa chỉ bộ nhớ là 64 bit mọi thứ khác vẫn còn 32 bit). 64 bit dành cho ứng dụng máy chủ. Sử dụng 32 bit cho các chương trình chung.
EDIT
32 chương trình Bit là 32 bit với một quyết chế độ 64 bit trong đó 32 bit (địa chỉ cơ sở luôn luôn là 0 trong Windows) là không sử dụng vì vậy chỉ 32 bit (offset) là bắt buộc cho các địa chỉ bộ nhớ .
64 Chương trình bit là 32 bit với địa chỉ bộ nhớ bitmap 64 bit (Tôi không biết kích thước của địa chỉ cơ sở ở chế độ 64 bit vì chúng luôn là 0 và không liên quan trong nhiều thập kỷ). Một chương trình 64 bit có thể trở thành một chương trình 64 bit đầy đủ, chỉ bằng cách sử dụng các hướng dẫn 64 bit khi nó chọn, nói chung cho các nhiệm vụ xử lý khoa học hoặc video. Nhưng 64 bit tất cả mọi thứ nhai quá nhiều bộ nhớ và Windows 'và thư viện khác mong đợi các giá trị 32 bit.
Hiệu trưởng chung là bạn không cần phải làm gì để đạt được nhiệm vụ của mình. Mọi người gặp rắc rối khi họ bắt đầu suy nghĩ về 32bit/64bit. Nếu bạn bỏ qua bitness, Microsoft đã đặt tất cả công việc vào để làm cho nó hoạt động.
Nếu bạn gõ iexpress trong hộp thoại Bắt đầu - Chạy (Winkey + R), bạn sẽ có thể tạo bat2exe của riêng mình.
Bạn có thể sử dụng sau ở phía trên của tập tin thực thi của bạn:
@echo off
set "SystemPath=%SystemRoot%\System32"
if not "%ProgramFiles(x86)%"=="" set "SystemPath=%SystemRoot%\Sysnative"
Tiếp theo, bạn cần phải gọi mọi ứng dụng giao diện điều khiển trong System32 thư mục của Windows với %SystemPath%
trong tập tin batch của bạn, ví dụ %SystemPath%\findstr.exe
. Tất nhiên bạn cũng có thể bắt đầu cmd với %SystemPath%\cmd.exe
để chạy luôn trình thông dịch dòng lệnh 64 bit từ bên trong tệp lô.
Cách hoạt động?
Biến môi trường SystemPath được đặt trước thành thư mục System32 của Windows.
Tệp lô được đóng gói thành tệp thực thi 32 bit chạy ngay bây giờ tất cả ứng dụng bảng điều khiển thực sự từ thư mục System32 trên Windows 32 bit, nhưng từ thư mục %SystemRoot%\SysWOW64
trên Windows 64 bit.
Do đó, tệp lô sẽ kiểm tra tiếp theo nếu biến môi trường ProgramFiles (x86) tồn tại trong trường hợp này chỉ trên Windows x64. Do đó, điều kiện trên dòng thứ ba là sai trên Windows x86 và SystemPath không thay đổi. Nhưng SystemPath được sửa đổi thành %SystemRoot%\Sysnative
trên Windows 64 bit để gọi các ứng dụng trong %SystemRoot%\System32
từ thực thi 32 bit tương ứng cmd.exe
mà không cần chuyển hướng đến %SystemRoot%\SysWOW64
.
Để biết thêm chi tiết, xem File System Redirector bài viết trong Microsoft Developer Network (MSDN).
Nhưng tốt hơn là nên làm điều đó tất cả các bên trong phiên bản 32-bit thực thi mà trích xuất các tập tin batch để %TEMP%
và chạy nó hoặc với
%SystemRoot%\System32\cmd.exe /C "%TEMP%\ExtractedBatch.bat"
cho Windows 32-bit nơi biến môi trường ProgramFiles (x86) không tồn tại hoặc với
%SystemRoot%\Sysnative\cmd.exe /C "%TEMP%\ExtractedBatch.bat"
trên Windows 64 bit. Dưới đây là một trong nhiều mã có thể được sử dụng ở trên cùng của một tập tin thực thi để chạy luôn các ứng dụng giao diện điều khiển 64 bit độc lập khi được khởi động trên Windows x64 với 32-bit hoặc với 64232 bit cmd.exe
.
@echo off
set "SystemPath=%SystemRoot%\System32"
if not "%ProgramFiles(x86)%"=="" (
if exist %SystemRoot%\Sysnative\* set "SystemPath=%SystemRoot%\Sysnative"
)
Trên Windows x64, nó được kiểm tra bổ sung nếu có tệp trong %SystemRoot%\Sysnative
. Trong trường hợp này, tập tin thực thi được thực hiện với 32 bit cmd.exe
và chỉ trong trường hợp này, %SystemRoot%\Sysnative
cần được sử dụng. Nếu không, %SystemRoot%\System32
cũng có thể được sử dụng trên Windows x64 như khi tệp lô được bắt đầu với 64 bit cmd.exe
, đây là thư mục chứa các ứng dụng giao diện điều khiển 64 bit.
Lưu ý: %SystemRoot%\Sysnative
không phải là một thư mục. Nó không thể cd
để %SystemRoot%\Sysnative
hoặc sử dụng if exist %SystemRoot%\Sysnative
- 1. Tập tin mở VIM ở chế độ chia dọc ở chế độ chỉ đọc
- 2. Cygwin chạy tập lệnh từ một tập tin batch?
- 3. Gọi 32 bit COM từ C# đang chạy ở chế độ 64bit
- 4. Viết utf16 vào tập tin ở chế độ nhị phân
- 5. Chạy tập tin batch trong vb.net?
- 6. x86-32/x86-64 mảnh mã máy-đa-bit phát hiện chế độ 64 bit tại thời gian chạy?
- 7. Chạy nhị phân phổ OS X ở chế độ 32 bit
- 8. Force VM khởi chạy ở chế độ 32 bit WebStart JNLP
- 9. Cách nhập chế độ 64 bit trên x86_64
- 10. Lệnh ngủ trong tập tin batch?
- 11. Gọi tập tin Batch từ C#
- 12. Bắt buộc ứng dụng Cocoa bắt đầu ở chế độ 32 bit theo chương trình
- 13. Làm cách nào để biên dịch Thư viện Dịch vụ WCF ở chế độ 32 bit?
- 14. Có cách nào để buộc ứng dụng biên dịch "Bất kỳ CPU" nào chạy ở chế độ 32 bit trên hệ điều hành 64 bit không?
- 15. pop Chỉ thị không được hỗ trợ ở chế độ 64 bit bằng NASM?
- 16. Làm cách nào để phát hiện các cửa sổ 32 bit hoặc 64 bit khi sử dụng tập lệnh NSIS?
- 17. Chạy một tập tin batch mỗi x giây bằng PowerShell
- 18. Có thể sử dụng thanh ghi/hướng dẫn 32 bit ở chế độ thực không?
- 19. tập tin Python Chế độ chi tiết
- 20. cách gọi/chạy nhiều tập lệnh python từ tập tin batch trong cửa sổ xp/7
- 21. gọi các tập tin batch trong nant
- 22. chuỗi Parsing trong tập tin batch
- 23. cách viết ở chế độ nối thêm cho tập tin văn bản
- 24. Cách chọn thư mục (không phải tập tin) ở chế độ IDO, emacs-24
- 25. Shellexec vs Exec vs Shellexec tập tin batch của tôi
- 26. Intellij ý tưởng 32 bit so với tốc độ 64 bit và hiệu suất
- 27. Lỗi AJAX ASP.NET AJAX/32-bit đến 64-bit
- 28. 32 bit int * 32 bit int = 64 bit int?
- 29. Nhập 32 bit dll trong 64 bit .Net application
- 30. Nhận lỗi từ tập tin batch được gọi là
Bạn có thể quan tâm đến việc này http://social.msdn.microsoft.com/Forums/en-US/adcae113-4758-481a-a367-60d5d14d97d6/this- là-how-to-turn-vbs-và-js-files-into-exe-files-from-the-command-line-không-bên thứ ba-công cụ? forum = scripting –
Tôi đã thử iexpress trên hệ điều hành 64 bit của mình và nó hoạt động, nhưng tôi tự hỏi nếu chương trình tương tự có thể chạy trong một hệ điều hành 32 bit. Tôi muốn chương trình của tôi để chạy trong 64 bit chế độ công cụ đăng ký becausesome là không thể truy cập với reg.exe được gọi là từ một tập tin batch 32 bit. Tôi không thể thêm một giá trị vào "HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ Run" trừ khi tôi trực tiếp chạy tập tin thực thi hoặc tôi biên dịch nó ở chế độ 64 bit (hoặc với iExpress). – SkYWAGz
Xem 'reg flags /?' –