2010-11-19 20 views
7

Tôi đang cố gắng chạy một vấn đề bên ngoài từ C# bằng cách sử dụng Process.Start, nhưng đang chạy vào các vấn đề quyền. Khi tôi mở một dấu nhắc lệnh bình thường (không phải là một admin) và chạy lệnh của tôi họ làm việc tốt, nhưng khi tôi mở một dấu nhắc lệnh thông qua Process.Start, tôi nhận được một lỗi ghi vào thư mục. ("Tôi không thể viết trên tập tin test.log")
Nếu tôi chạy nó như một quản trị viên thông qua Process.Start nó hoạt động tốt, nhưng tôi nhận được popup quyền. Có ai có bất kỳ ý tưởng có thể giúp tôi tìm ra điều này? Cảm ơn!Process.Start Permissions Problem

Đây là mã Tôi đang sử dụng:

Process proc = new Process(); 
proc.StartInfo.FileName = @"cmd.exe"; 
proc.StartInfo.Arguments = @"/k latex C:\Users\Shane\Documents\test.tex"; 
proc.Start(); 
proc.WaitForExit(); 
+1

Tại sao bạn cần gói chương trình của bạn thông qua cmd.exe? –

Trả lời

7

Tôi tự hỏi liệu nó đang cố gắng để viết một bản ghi chẩn đoán vào thư mục làm việc hiện tại, mà bạn có thể không có quyền cho. (Tôi không biết là nó sẽ kế thừa thư mục làm việc hay là thư mục chứa cmd.exe). Tôi đề nghị bạn chỉ định thư mục làm việc cho quy trình mới bằng cách sử dụng ProcessStartInfo.WorkingDirectory.

(Là một sang một bên, cá nhân tôi tìm thấy nó sạch hơn để tạo ra một mới ProcessStartInfo một dân cư - C# đối tượng khởi tạo thực hiện điều này đặc biệt tốt đẹp) và sau đó gọi Process.Start(ProcessStartInfo) để bắt đầu nó. Nếu không, có vẻ như đã có một quá trình khi chưa thực sự có một quy trình. Chỉ cần MHO và không liên quan đến vấn đề bạn đang điều tra, có thể.)

+0

Tuyệt vời! Tôi không nhận ra rằng thư mục làm việc có thể khác khi bắt đầu theo cách này. Tôi đã thay đổi thư mục làm việc thành thư mục có tệp tex của tôi và nó hoạt động. Cảm ơn! –

1

Thay vì sử dụng cmd.exe làm thuộc tính FileName của đối tượng Process, giữ các lệnh của bạn trong một tệp lô và sau đó sử dụng tệp đó để thực thi.

Ngoài ra, bạn có thể đề cập đến các đặc quyền của quản trị viên như tên người dùng, mật khẩu, tên miền, v.v. qua thuộc tính StartInfo của lớp Quy trình. Nếu bạn sử dụng các thuộc tính này, tôi nghĩ rằng vấn đề quyền sẽ không đến. Here bạn có thể tìm thêm thông tin về tài sản StartInfo.

Hy vọng điều đó sẽ hữu ích.