2012-04-16 20 views
12

Vì vậy, tôi có một ví dụ đơn giản, trong đó tôi có ứng dụng A, có một số mã hóa cứng người dùng X, một quản trị viên cục bộ, và sau đó nó khởi chạy ứng dụng B với những Thông tin xác thực đó bằng cách sử dụng đường dẫn tuyệt đối được mã hóa cứng. Cả hai ứng dụng bảng điều khiển A và B và dotnet, tuy nhiên chúng không tương tác với bảng điều khiển, chỉ cần ghi thông tin vào một tệp.các cửa sổ có một giới hạn khi một quá trình được bắt đầu bởi một tác vụ được lập lịch dưới một bộ các ủy nhiệm chạy một chương trình khác theo một bộ khác nhau của Creds

Khi tôi chạy A B tương tác (dưới creds của tôi, bằng cách nhấp đúp, hoặc thông qua Cmd.exe, hoặc một phiên PowerShell tương tác nó chạy tốt. Gọi thành công

Khi tôi chạy nó thông qua một kế hoạch nhiệm vụ với A là dưới bằng creds, và gọi B với người sử dụng X mã lỗi của Process.Start (mystartinfo) là -1073741502 hoặc 0xC0000142 trong hex có nghĩa là "ứng dụng không thể khởi động đúng"

Tuy nhiên nếu tôi chạy đã lên lịch nhiệm vụ gọi A với thông tin đăng nhập X của người dùng hoạt động ..

Tôi thực hiện thử nghiệm nhỏ này chủ yếu là vì tôi thấy hành vi tương tự khi cố gắng thực hiện "start-job -Credential" trong quyền hạn từ nhiệm vụ được lên lịch hoặc từ xa hoặc gọi quá trình bắt đầu trong PowerShell hoặc System.Diagnostic> Process.Start từ trong PowerShell trong cùng một kịch bản. Lúc đầu, tôi nghĩ rằng đó là một lỗi trong PowerShell nhưng nó có vẻ sâu hơn .. Hoặc Windows hoặc Dotnet đặc biệt và tôi muốn biết nếu điều này được biết/tài liệu và nếu có bất kỳ cách giải quyết.

+0

Mọi thứ có ý nghĩa trong nhật ký công việc lên lịch? –

+0

không có như là quá trình cha mẹ (một trong những nhiệm vụ theo lịch trình chạy) chỉ bắt và đăng nhập các ngoại lệ, công việc lên lịch chỉ cần đăng nhập một thực hiện thành công. – klumsy

+0

Tổng số phát trong bóng tối. Tôi biết các tác vụ đã lên lịch yêu cầu "Đăng nhập dưới dạng tác vụ hàng loạt", vì bạn có thể chạy thành công A với người dùng X một cách trực tiếp, tôi không chắc liệu điều này có áp dụng hay không. http://msdn.microsoft.com/en-us/library/ms813942.aspx –

Trả lời

1

Tôi gặp phải một hành vi như vậy được gây ra trong Windows Server 2008R2. Ứng dụng C# của tôi (A) bắt đầu quá trình B.

Quy trình B không chạy được mà không cần truy cập vào Windows Desktop, [không gọi Windows API CreateWindow();] được ngăn chặn để chạy khi chạy dưới dạng Dịch vụ (hoặc theo lịch) (điều này nhằm ngăn chặn sự leo thang đặc quyền của người dùng được sử dụng "at/interactive cmd.exe")

Tôi khuyên bạn nên kiểm tra môi trường đang sử dụng và kiểm tra xem đó có phải là vấn đề tương tự không. Nếu có, thì bạn nên tìm cách loại bỏ các tham chiếu đến lệnh gọi hàm CreateWindow() API hoặc xử lý nó một cách chính xác.

Thật không may, tôi không có quyền truy cập vào Quy trình B và do đó không thành công trong việc giải quyết vấn đề này. Tôi đã kết thúc việc triển khai giải pháp trên máy chủ 2003.

+0

cảm ơn, tôi biết điều đó. Trong thế giới thực của tôi, kịch bản của nó là tất cả về PowerShell V3 và các kịch bản. nhưng trong prepro của tôi tôi đã đề cập ở trên, tôi chỉ cần thực hiện ứng dụng giao diện điều khiển rất đơn giản mà không Tạo bất kỳ cửa sổ. – klumsy

1

Vì vậy, bạn có một quá trình Một chạy từ một Scheduled Task (không tương tác) như bạn và khởi chạy quá trình B là X (quản trị cục bộ) Làm rõ:

  • Bạn có một admin trên hộp đó?
  • B có cần tay cầm cửa sổ hoặc tay cầm bảng điều khiển không?

Bạn có thể thử sử dụng ProcessMonitor để xem cuộc gọi nào chính xác bị lỗi. Tôi đoán là B đang cố gắng tương tác với máy tính để bàn và bị từ chối cho phép làm điều đó.

Khi bạn đăng nhập với tư cách là người dùng A và bạn khởi chạy quá trình tương tác bằng cách sử dụng bộ lập lịch, cửa sổ sẽ xuất hiện tốt.Nhưng nếu bạn đăng nhập với tư cách là người dùng B (nói một người dùng khách) và khởi chạy một quá trình tương tác chạy như A (nói một quản trị viên cục bộ), thì hệ thống thực sự có vấn đề về việc làm gì để hiển thị giao diện người dùng

Để tóm tắt, nếu bạn có một quy trình tương tác sử dụng thông tin đăng nhập của người dùng không đăng nhập, không có người chiến thắng rõ ràng nào là điều đúng đắn cần làm.

1

Ok bài đăng này khá cũ nhưng tôi đang chạy trong cùng một vấn đề (quá trình khởi động PowerShell không thành công với mã thoát -1073741502 khi chạy qua dịch vụ).
Rõ ràng đây có liên quan đến vấn đề này (Why is this process crashing as soon as it is launched?)

Process.Start nội bộ gọi CreateProcessWithLogonW (CPLW) khi thông tin được quy định. CreateProcessWithLogonW không thể được gọi là từ môi trường dịch vụ Windows (chẳng hạn như dịch vụ IIS WCF). Nó chỉ có thể được gọi từ một quá trình tương tác (một ứng dụng đưa ra bởi một người dùng đăng nhập thông qua CTRL-ALT-DELETE).

Tôi đoán nó tương tự như khi bạn đang chạy tác vụ được lên lịch, nó chạy trong môi trường dịch vụ Windows.
Có thể các cuộc gọi API gốc bạn đang gây ra sẽ bị ngăn không cho chạy từ một dịch vụ.

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