Buộc WScript 64 bit để chạy .vbs


2

Tôi đang cố chạy tập lệnh .vbs dưới 64Bit. Khi tôi chạy tập lệnh này theo cách thủ công, nó sẽ thực thi đúng, nhưng khi được khởi chạy bởi một thứ khác, nó sẽ chạy dưới 32 bit và sẽ không thực thi đúng.

Đây là kịch bản của tôi:

Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run Chr(34) & "C:\Users\Chris Nicol\Documents\SlickRun Scripts\Zune\RunZune.bat" & Chr(34), 0
Set WshShell = Nothing

Về cơ bản tôi muốn buộc sử dụng C:\windows\syswow64\cmd.exe, để nó sẽ chạy chính xác. Tôi dường như không thể hiểu đúng cú pháp và không thể tìm thấy sự giúp đỡ về điều này.

Đây là tệp bó và tệp regedit mà tôi đang cố thực hiện:

RunZune.bat:

@ECHO OFF

regedit /s FeaturesOverride.reg
"C:\Program Files\Zune\Zune.exe"

exit

Tính năngOverride.reg:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Zune\Features]
"Channels"="US,CA"
"MusicVideos"="US,CA"
"Picks"="US,CA"
"Podcasts"="US,CA"
"QuickMixLocal"="US,CA"

1
Wscript trong syswow64 sẽ là phiên bản 32 bit của wscript. Phiên bản 64 bit nằm trong windows / system32. Tôi không thấy lý do tại sao nó sẽ làm cho một sự khác biệt cho kịch bản này mặc dù. Bạn có chắc chắn "cái gì khác" đang thực thi nó có quyền truy cập vào thư mục người dùng không? Có bất kỳ thông báo lỗi khi nó không hoạt động?
Ƭᴇcʜιᴇ007

Vâng, nó không thực sự là nó thất bại, và nó có thể là một vấn đề quyền. .Bi mà tôi đang chạy đang chạy tệp .reg để sửa đổi sổ đăng ký trước khi chạy zune.exe Khi tôi chạy .vbs bằng cách nhấp đúp vào nó, mọi thứ hoạt động như mong đợi, nhưng khởi chạy nó thông qua SlickRun sẽ không sửa đổi sổ đăng ký, nhưng cũng sẽ không gây ra lỗi
Chris Nicol

Tôi đã cập nhật câu hỏi để bao gồm tất cả các tệp tôi đang cố thực hiện
Chris Nicol

Có lẽ đóng SlickRun, tìm tệp SlickRun.exe và đặt khả năng tương thích của nó thành "chạy với tư cách quản trị viên", sau đó thử lại vì điều này sẽ giúp tránh các vấn đề về quyền.
Ƭᴇcʜιᴇ007

SlickRun có một tùy chọn cho "Chạy với tư cách quản trị viên" và tôi đã chọn nó. Tôi đã nói chuyện với nhà phát triển đằng sau SlickRun và anh ấy cảm thấy có lẽ đó là vấn đề 64 bit. Đề xuất của anh ta đã không hoạt động (chạy tập lệnh thông qua phiên bản 64 bit của WScript). Tuy nhiên, tôi đang cố gắng xem liệu tôi có thể chạy .bat trong 64 bit để xem điều đó có hiệu quả không
Chris Nicol

Câu trả lời:


1

Đoạn mã sau sẽ kiểm tra xem hệ thống có phải là 64Bit hay không và trong trường hợp này hãy đóng tập lệnh và chạy lại nó buộc Máy chủ 64Bit bằng cách gọi nó trực tiếp với tập lệnh làm tham số.

If fso.FileExists("C:\Windows\SysWOW64\wscript.exe") Then
    If InStr(1, WScript.FullName, "SysWOW64", vbTextCompare) <> 0 Then ' = very basic 64bit check replace if you want a more sophisticated one
        newFullName = Replace(WScript.FullName, "SysWOW64", "Sysnative", 1, -1, vbTextCompare) ' System32 will be replaced by Sysnative. calls to sysnative bypass WoW64 emulation, cscript or wscript stays the same as they were
        newArguments = "" ' all arguments are given to the new script call
        For Each arg In WScript.Arguments
            newArguments = newArguments & arg & " "
        Next
        wso.Run newFullName & " """ & WScript.ScriptFullName & """ " & newArguments, , False
        WScript.Quit ' Close 32Bit scripting host
    End If
End If

Giải pháp này đảm bảo rằng tập lệnh được chạy trong 64Bit bất kể ai gọi nó. Nếu bạn gặp tình huống có thể điều khiển cuộc gọi (ví dụ: tập lệnh chỉ được gọi thông qua một liên kết cụ thể), bạn có thể chỉ cần sử dụng nguyên tắc cơ bản (là bộ chuyển hướng hệ thống tệp sysnative ) trực tiếp trong phím tắt.


SysWOW64là thư mục 32 bit. System32là phiên bản 64 bit
phuclv

Có, và những gì nó làm là kiểm tra xem syswow64 wscript.exe có tồn tại không (kiểm tra rất bẩn cho hệ thống 64 bit) và sau đó thay thế tên syswow64 bằng sysnative. Trong khi system32 là phiên bản 64 bit cho quy trình 64 bit, điều này không đúng với quy trình 32 bit. một quá trình 32 bit sẽ được chuyển hướng để system32 cuối cùng sẽ trở thành syswow64. Sysnative là cách để nói quá trình 32 bit đi đến system32
Syberdoor
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.