2012-06-04 37 views
5

Tôi có một VBScript mà tôi đã viết cần được thực thi từ một tệp MSI. Các kịch bản thực hiện một cách chính xác khi tôi chạy nó trong Windows trên riêng của mình, tuy nhiên, khi tôi chạy nó từ trình cài đặt tôi nhận được lỗi sau như thể hiện trong file log:VBScript sẽ không thực thi chính xác từ tệp MSI

Microsoft VBScript runtime error: object required: 'WScript', Line 3, Column 2 

kịch bản là dưới đây:

sub shell(cmd) 
    Set objShell = WScript.CreateObject("WScript.Shell") 

    objShell.Run("""" & cmd & """") 
    Set objShell = Nothing 
end sub 

set objFSO = CreateObject("Scripting.FileSystemObject") 

strcmd32 = "C:\Path\PathToExecutable.exe" 
strcmd64 = "C:\Path\PathToExecutable64.exe" 

if (objFSO.FileExists(strcmd32)) then 
    shell(strcmd32) 
else 
    shell(strcmd64) 
end if 

set objFSO = Nothing 

Như đã nêu trước đó, tập lệnh này chạy tốt nếu tôi chạy nó bên ngoài ngữ cảnh của trình cài đặt. Kiểu dự án thiết lập là gói cài đặt và triển khai VS2010 (đây là những gì khách hàng muốn sử dụng và tôi không thể sử dụng bất kỳ thứ gì khác). Ý tưởng nào?

Trả lời

7

Trong phụ "trình bao", tôi đã xóa WScript khỏi dòng đầu tiên trước cuộc gọi đến "CreateObject()". Điểm mấu sửa đổi bây giờ trông như thế này:

'Note the absent reference to WScript on the call to CreateObject() 
Set objShell = CreateObject("WScript.Shell") 
+0

Đối tượng WScript không được hỗ trợ trong tệp VBS chạy dưới dạng hành động tùy chỉnh. Nếu bạn cần sử dụng kiểu đối tượng này thì phương thức trên là phương thức duy nhất hoạt động. Một mặt khác, hành động tùy chỉnh của VBS không phải là đề xuất đầu tiên của tôi, nhưng tất cả phụ thuộc vào thời gian bạn có sẵn để tạo gói cài đặt. Các hành động tùy chỉnh của VBS đi kèm với rất nhiều rủi ro, chẳng hạn như chống virus hoặc công cụ vscript thất bại nhiều thứ khác. Một Win32 DLL sẽ là sự lựa chọn tốt nhất cho một hành động tùy chỉnh. –

+0

Về cơ bản, tôi có tập lệnh này, sau đó một tập lệnh khác để tạo lối tắt được bao gồm bên trong mô-đun hợp nhất (Dự án thiết lập và triển khai không cung cấp khả năng liên kết đến tệp trong mô đun hợp nhất) và tập lệnh xóa các phím tắt đã được gỡ cài đặt . Tôi đã đi các tuyến đường vbs để tiết kiệm thời gian như tôi không có thời gian để tìm hiểu làm thế nào để tạo một DLL hành động tùy chỉnh. –

3

Nếu bạn chỉ có một dự án đơn giản bao gồm một số hợp module và các tập tin của các ứng dụng mà bạn có thể sử dụng một công cụ tốt hơn, Advanced Installer. Đối với những gì bạn cần, bạn có thể sử dụng phiên bản miễn phí, tức là tạo loại dự án "Đơn giản". Việc thêm các mô-đun và tệp hợp nhất sẽ không mất nhiều hơn một phút.

Bây giờ có một phần dễ dàng là bạn hoàn toàn loại bỏ các hành động tùy chỉnh của mình, để tạo các lối tắt, bạn có thể vào trang Tệp và Thư mục và sử dụng tùy chọn menu ngữ cảnh hoặc thanh công cụ, bạn có thể tạo external shortcut có thể định cấu hình để trỏ đến tệp từ mô-đun hợp nhất hoặc thậm chí không phải từ gói.

Bằng cách này bạn có thể tạo gói thiết lập gọn gàng hơn, dễ dàng hơn nhiều và không phải lo lắng về khả năng hành động tùy chỉnh của bạn không thành công.

+1

Đề xuất tốt, nhưng khách hàng của tôi muốn sử dụng dự án Thiết lập và Triển khai vì đó là những gì nhóm của anh ấy quen thuộc. Và nếu tôi có sự lựa chọn của mình, có lẽ tôi sẽ sử dụng WiX vì đó là những gì tôi quen thuộc. –

Các vấn đề liên quan