2008-09-23 16 views
8

Bên trong một mạo danh NET 3.5 ứng dụng web chạy Tôi cố gắng để thực hiện một quá trình qua:Bắt đầu một quá trình trong C# với tên người dùng và mật khẩu ném "Truy cập bị từ chối" ngoại lệ

var process = new Process 
      { StartInfo = 
        { CreateNoWindow = true, 
         FileName = "someFileName", 
         Domain = "someDomain", 
         Username = "someUserName", 
         Password = securePassword, 
         UseShellExecute = false 
        } 
      }; 

process.Start(); 

-Changing chế độ tin cậy để đầy đủ trong web.config không khắc phục được.

-Lưu ý var securePassword là một securityString được thiết lập trước đó trong mã.

Điều này ném ngoại lệ với 'Truy cập bị từ chối' làm thông báo của nó. Nếu tôi loại bỏ thông tin tên người dùng và mật khẩu, ngoại lệ sẽ biến mất, nhưng quá trình này bắt đầu bằng aspnet_wp thay vì người dùng tôi cần nó.

Tôi đã gặp sự cố này trong nhiều diễn đàn và không bao giờ thấy giải pháp được cung cấp. Bất kỳ ý tưởng nào?

+0

bất kỳ giải pháp cuối cùng nào có mẫu mã nguồn đầy đủ hoạt động về nó? – Kiquenet

Trả lời

0

Tôi đã gặp phải sự cố tương tự mà bạn đã thực hiện đối với một dự án. Có nên là một cách để sinh ra một quy trình từ ứng dụng web của bạn với các thông tin xác thực đã cho, nhưng trong thực tế, đó là một kludge tốt nhất. Những gì tôi vết thương cuối cùng làm là chỉ cần có các ứng dụng đẩy thông tin đến một MSMQ và có một dịch vụ cửa sổ xuất hiện các mục của Queue một phục vụ các yêu cầu.

Ngay cả khi bạn yêu thích mạo danh, nó vẫn muốn chạy dưới tài khoản người dùng theaspnet.

2

Bạn có thể sử dụng ProcessStartInfo cho phép bạn chỉ định bằng chứng xác thực. Bí quyết là mật khẩu là một chuỗi an toàn, vì vậy bạn phải chuyển nó thành một mảng byte.

Các mã có thể giống như thế:

Dim startInfo As New ProcessStartInfo(programName) 
     With startInfo 
      .Domain = "test.local" 
      .WorkingDirectory = My.Application.Info.DirectoryPath 
      .UserName = "testuser" 
      Dim pwd As New Security.SecureString 
      For Each c As Char In "password" 
       pwd.AppendChar(c) 
      Next 
      .Password = pwd 

      'If you provide a value for the Password property, the UseShellExecute property must be false, or an InvalidOperationException will be thrown when the Process..::.Start(ProcessStartInfo) method is called. 
      .UseShellExecute = False 

      .WindowStyle = ProcessWindowStyle.Hidden 
     End With 
+0

Giả sử quá trình này là một exe của ứng dụng VB6. Tôi có cần sửa đổi ứng dụng Vb6 quá tải dự án không? hoặc Để tạo một số tham số GLOBAL trong VB6 để bắt Tên người dùng hoặc Mật khẩu được gửi từ chương trình này và để kiểm tra xem các thông số này có tồn tại hay không sau đó bấm nút đăng nhập của màn hình đăng nhập của ứng dụng VB6. –

+1

@TejuMB Trong câu hỏi ban đầu và trong câu trả lời của tôi, ProcessStartInfo chỉ được sử dụng để trình bao ra một quá trình với tư cách là một người dùng Windows khác (có lẽ do các điều khoản khác nhau). Có một thuộc tính Argument trên ProcessStartInfo [link] http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.arguments (v = vs.110) .aspx để bạn cũng có thể gửi các tham số cho mà bạn có thể sửa đổi ứng dụng VB6 của bạn để nhận được, nhưng đó là bên ngoài những gì câu hỏi này là về. –

0

Kiểm tra mức Code Access Security như Process đòi hỏi Full Trust. Ứng dụng web của bạn có thể đang chạy trong cài đặt tin cậy một phần.

Từ Process trang MSDN:

Quyền

* LinkDemand
cho niềm tin đầy đủ cho người gọi ngay lập tức. Không thể sử dụng lớp này bằng mã được tin cậy một phần.

* InheritanceDemand
để tin tưởng đầy đủ cho người thừa kế. Lớp này không thể được thừa hưởng bởi mã được tin cậy một phần.

0

tôi muốn đề cập đến mà tôi đã thử các mã tại this site bao gồm cả mã cập nhật đề cập trong các ý kiến. Mã này chạy quá trình như là danh tính mạo danh (mà thực sự là tất cả những gì tôi cần), nhưng việc chuyển hướng lỗi tiêu chuẩn không thành công - vì vậy liên kết này có thể hữu ích cho những người không quan tâm đến việc xử lý stderr.

1

Không chắc chắn đây có phải không, nhưng tôi đã gặp sự cố liên quan và câu trả lời là tài khoản không được phép mạo danh trên máy. Điều này có thể được thay đổi bằng cách thêm tài khoản vào Chính sách "Mạo danh ứng dụng khách sau khi xác thực" bằng trình quản lý chính sách cục bộ trên máy.

+0

Cách thêm tài khoản vào chính sách "Mạo danh một khách hàng sau khi xác thực"? –

+0

Trong công cụ quản trị, bạn sẽ tìm thấy "Chính sách bảo mật cục bộ" chạy và chọn "Quyền người dùng". Tìm "Mạo danh một khách hàng sau khi xác thực" trong danh sách và nhấp đúp vào nó. Sau đó, bạn chỉ cần thêm người dùng hoặc nhóm người dùng thuộc về. Bạn có thể đọc thêm tại đây http://technet.microsoft.com/en-us/library/dn221967.aspx về ý nghĩa của việc chỉ định điều này. –

1

Tôi đã đi một cách khác và đặt toàn bộ ứng dụng trong hồ bơi ứng dụng của riêng mình đang chạy với tư cách là người dùng mà chúng tôi đã mạo danh ban đầu. Bây giờ, khi asp.net sinh ra một quy trình mới, nó sinh ra trong bối cảnh của người dùng thay vì aspnet_wp. Không phải là giải pháp chính xác cho vấn đề tôi đã đăng, nhưng nó đã làm việc cho tình huống của chúng tôi.

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