2009-05-18 7 views
6

Làm cách nào để chạy một tệp lô ở phía máy khách? Tệp exe? Chỉ cần mở chương trình cài đặt sẵn ở phía máy khách?Làm cách nào để chạy một tệp chương trình hoặc tệp hàng loạt ở phía máy khách?

[Chỉnh sửa]

Về ActiveX, tôi đã cố gắng

var activeXObj = new ActiveXObject("Shell.Application"); 
    activeXObj.ShellExecute("C:\\WINDOWS\\NOTEPAD.EXE", "", "", "open", "1"); 

nhưng điều này không hoạt động. Bất kỳ đề xuất?

+4

Điều này là không thể - javascript được thiết kế đặc biệt để KHÔNG cho phép điều này, vì đó sẽ là lỗ hổng bảo mật HUGE. Cần thiết hay không, bạn không thể làm điều đó. –

+0

Không bao giờ nói không bao giờ :) Một chương trình được cài đặt sẵn có thể cài đặt điều khiển ActiveX cho phép nó được bắt đầu từ JavaScript. (Disclaimer: điều này sẽ được icky và bảo trì cực kỳ cao, tôi không ủng hộ bạn thực sự cố gắng này) – Andomar

+0

Bạn có nghĩa là, bạn đang thực sự yêu cầu SO cho một lỗ trình duyệt? Đó là những gì câu hỏi này có giá trị. Tôi không chắc nó quan trọng cho dù đó là ứng dụng được cài đặt sẵn của bạn hay không. Có một số điều mà chúng ta không nên sẵn lòng giúp đỡ về SO. Tôi không nghĩ rằng bạn thực sự hiểu đó là những gì bạn đang yêu cầu. – cgp

Trả lời

33

Từ Javascript? Bạn không thể. Đó là một nguy cơ bảo mật. Hãy suy nghĩ về nó - bạn có muốn mọi trang web có thể chạy các chương trình trên PC của bạn không?

+0

Tôi biết rằng đây là một nguy cơ bảo mật, nhưng đây là một yêu cầu cấp thiết để chạy chương trình được cài đặt sẵn trên máy khách và từ Javascript? – Ahmed

+0

Bạn có thể có tệp lô để khôi phục ánh xạ ổ đĩa trên trang web mạng nội bộ, ví dụ: – Andomar

+0

Bạn có thể đạt được điều này với Microsoft ClickOnce (không đáng tin cậy, yêu cầu IE và ứng dụng .NET) Một số ngữ cảnh khác: trang web? Ứng dụng là gì? – pjc50

10

Bạn có nghĩa là khởi chạy chương trình bên ngoài thông qua một cửa sổ trình duyệt bằng JavaScript? Không đời nào bạn có thể làm được! Đó là một lỗ đen bảo mật chết tiệt!

5

Chuyển hướng khách hàng đến http://yourserver/batchfile.bat. Trong một số trình duyệt, điều này sẽ nhắc người dùng chạy tập tin thực thi.

+0

http: //yourserver/batchfile.bat là phía máy chủ, tệp được thực thi là phía máy khách? – Ahmed

+0

Nó sẽ tải về lôfile cho PC, và thực hiện nó ở đó, nếu người dùng chọn "Run". – Andomar

+0

@Ahmed: những gì anh ấy đề xuất là bạn chỉ đạo trình duyệt tải xuống tệp .bat và yêu cầu người dùng thực thi nó. – belgariontheking

2

Nếu sự cố là tệp bó đang được hiển thị trong trình duyệt, bạn cần đặt Content-TypeContent-Disposition trong tiêu đề HTTP để người dùng được nhắc Lưu (hoặc Chạy) tệp thay vì để trình duyệt hiển thị.

Bạn sẽ không thể chạy tệp mà không có sự đồng ý của người dùng nhưng điều này không phải là vấn đề.

Have a look at this question for a little more detail.

0

Về cơ bản, bạn không thể. Nếu bạn cần khởi chạy một thứ gì đó ở phía máy khách, bạn sẽ cần một cơ chế khác, có lẽ là một cơ chế được tích hợp sẵn. Một poster trước đây đã đề cập đến psexec (http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx), rõ ràng sẽ chỉ hoạt động nếu bạn có quyền thích hợp trên hệ thống đích. và hoàn toàn nằm ngoài trình duyệt.

Về cơ bản, những gì bạn đang yêu cầu là một LỚN, LỚN, vấn đề nếu bạn có thể làm điều đó dễ dàng.

Bạn có thể xem ActiveX, nhưng tôi không biết giới hạn của đối tượng ActiveX trong những ngày này (tôi biết có giới hạn, nhưng có lẽ bạn có thể làm việc trong đó).

+0

Vậy ... JavaScript yêu cầu máy chủ chạy psexec để bắt đầu một chương trình trên máy khách? Tôi sẽ làm việc. – Andomar

+0

Vâng, yea. Và một lần nữa, điều này chỉ hoạt động nếu máy chủ đang chạy như một người dùng có quyền thích hợp trên máy khách. –

5

Nếu bạn thực sự có quyền kiểm soát trên máy khách, thì bạn có thể muốn cài đặt một số dịch vụ daemon từ xa ở phía máy khách, như SSH.

PS. Gọi nó thông qua "máy chủ-mã" của bạn, tuy nhiên.

Đã cập nhật:

Đừng nản chí. Bạn hoàn toàn có thể làm điều đó một cách an toàn.

  1. Trước tiên, bạn cần dịch vụ daemon trên máy khách sẽ xử lý tác vụ gọi ứng dụng của bạn.Cá nhân, tôi muốn xây dựng đơn giản rpc-server như cửa sổ-dịch vụ với C + + hoặc Delphi; nhưng nhiều loại máy chủ khác cũng có thể thực hiện công việc (SSH, Apache, Telnet)

  2. Sau đó tạo một trang web cho phép người dùng "đăng ký" dịch vụ của họ với xác thực thích hợp để gọi dịch vụ đó (mật khẩu, khóa bảo mật))

  3. Khi bạn muốn gọi ứng dụng của mình từ trang web trên ứng dụng khách đã đăng ký, hãy thực hiện cuộc gọi ajax (xmlhttprequest) đến máy chủ của bạn.

  4. Máy chủ phải xác thực địa chỉ IP yêu cầu với thông tin đã đăng ký.

  5. Sau đó, thực hiện lệnh từ xa invokation cho khách hàng với thông tin đã đăng ký.

Có thể có một số tình huống mạng mà lược đồ này có thể không hoạt động. Tuy nhiên, nếu bạn thực sự có quyền kiểm soát môi trường thực thi thì luôn có một số cách giải quyết.

+0

Nhưng làm thế nào để làm điều này từ trang web/javascript? – Ahmed

+0

Thực hiện cuộc gọi ajax đến máy chủ của bạn. – Sake

+0

Đây vẫn là một giải pháp khủng khiếp, nhưng nó vui nhộn đến nỗi nó thật tuyệt vời. Và về mặt lý thuyết, nó có thể được thực hiện và "an toàn", giả sử bạn có thể tin tưởng máy chủ có quyền truy cập SSH vào máy khách. Nó sẽ chỉ áp dụng cho một cài đặt Intranet, và thực sự nó sẽ không bao giờ thực sự là một giải pháp thiết thực, nhưng nó tuyệt vời và không có addons trình duyệt (ví dụ: Flash, Silverlight, Java applet)! Không yêu cầu cấu hình quá nhiều để làm cho nó có thể sử dụng được bởi những người dùng ngốc thậm chí sẽ yêu cầu điều này. – bambams

6
<script language="javascript" type="text/javascript"> 

    function RunEXE(prog) { 
     var oShell = new ActiveXObject("WScript.Shell"); 
     oShell.Run('"' + prog + '"', 1); 
    }  
</script> 
+1

Giải pháp trên chỉ hoạt động trong IE, yêu cầu sự cho phép của người dùng để chạy ActiveX, nhưng IT WORKS !! – yurin