2011-08-26 41 views
9

Tôi có một chương trình (tôi đã tạo) và tôi muốn bắt đầu chương trình đó trên máy chủ khi tải trang web.Khởi động một chương trình từ ASP.NET C#

Đây là mã tôi có

public partial class _Default : System.Web.UI.Page 
{ 
    Process app = new Process(); 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     app.StartInfo.FileName = @"D:/Path to /My/Program to be run.exe"; 
     app.Start(); 
    } 
} 

Ngay bây giờ các ứng dụng là 'chạy' tuy nhiên nó bị treo ngay lập tức. Nếu tôi chỉ chạy ứng dụng (bằng cách nhấp đúp vào exe) nó chạy và mọi thứ đều ổn.

bất cứ ai nhìn thấy nếu tôi thiếu gì đó ở đây?

+0

Có thông báo lỗi nào khi gặp sự cố không? –

+0

BTW, tại sao đặt "ứng dụng" ở chế độ công khai? –

+0

"_ {application name} _ đã ngừng hoạt động. Windows đang kiểm tra giải pháp cho sự cố" – rlemon

Trả lời

10

Bạn có thể sử dụng ProcessStartInfo.

ProcessStartInfo psi = new ProcessStartInfo(); 
psi.FileName = @"D:/Path to /My/Program to be run.exe"; 
psi.WorkingDirectory = IO.Path.GetDirectoryName(psi.FileName); 
Diagnostics.Process.Start(psi); 
+0

Anh ấy đã làm điều đó, đó là những gì mà dòng 'app.StartInfo.FileName = @" ... ";' của anh ấy là. – qJake

+0

Duuuur, xin lỗi. Haha. – Smur

+2

Đã hoạt động! Những công việc này. Tuy nhiên Tại sao nó phải được gọi theo cách này?sự khác biệt thực sự (chỉ vì vậy tôi thực sự học một cái gì đó và không chỉ sao chép-dán câu trả lời của bạn) – rlemon

0

Tùy thuộc vào những gì bạn đang cố gắng chạy. Có lẽ khi bạn chạy nó từ ứng dụng C# của bạn một cái gì đó mất tích. Bạn cũng có thể không có quyền chính xác để chạy ứng dụng từ C#. Đó là tất cả những gì tôi thực sự có thể nói mà không biết những gì đang cố gắng để chạy.

+0

Ứng dụng tôi đang cố gắng chạy có rất ít phụ thuộc. Đó là một ứng dụng HMI nhỏ mà tôi đã viết để đọc các giá trị từ Thiết bị Nối tiếp và hiển thị chúng trong một biểu mẫu. Bây giờ tôi muốn mở ứng dụng từ trang web aC#/ASP.NET, đọc các giá trị từ thiết bị nối tiếp được kết nối với máy chủ, lưu trữ dữ liệu trên db hoặc trong tệp phẳng và cho phép người dùng hiển thị nó ngay bây giờ hoặc tại ngày sau đó. – rlemon

+0

Vì vậy, tôi khuyên bạn nên sử dụng Dịch vụ Windows để khởi động chương trình: theo cách này, HMI có thể lưu trữ dữ liệu trong cơ sở dữ liệu và sau đó, trong bất kỳ ứng dụng nào, bạn có thể hiển thị dữ liệu được sắp xếp theo datetime được chèn vào hoặc một cái gì đó tương tự. –

-1

Các bạn đã thử một cái gì đó như thế này trong Javascript: -

var shell = new ActiveXObject("Shell.Application"); 
var appExe = @"D:/Path to /My/Program to be run.exe"; 
shell.ShellExecute(appExe , "", "", "open", "1"); 
3

Nghe có vẻ như ứng dụng mà bạn đang cố gắng để chạy có một giao diện người dùng. Nếu bạn dự định chạy nó trên máy chủ bằng tài khoản ứng dụng ASP.NET, bạn sẽ gặp ít vấn đề hơn nếu bạn thiết kế ứng dụng như một ứng dụng console và bảo vệ tất cả các truy cập tới các tài nguyên bên ngoài, như thiết bị HMI của bạn, đăng nhập ngoại lệ.

+0

Tôi sẽ chuyển đổi ứng dụng thành ứng dụng bảng điều khiển cuối cùng. Tôi hoàn toàn mới với ASP.NET và làm thế nào nó tương tác với mã của nó phía sau. Tôi hiện đang đầu gối sâu vào một vài cuốn sách ASP.NET, học từ từ. – rlemon

3

Đây là sự cố bảo mật. Chạy bất kỳ exe từ bên ngoài thư mục bin đặt ra một mối đe dọa an ninh. Bạn phải sao chép exe bạn đang cố gắng chạy trong thư mục bin.

+0

Bạn có thể cấp quyền truy cập cho một thư mục bên ngoài các ứng dụng .NET không? –

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