2011-08-04 27 views
6

Tôi đang chạy một tệp thực thi nhỏ được tạo bởi bên thứ ba cần chạy thường xuyên trên máy chủ Windows 2008. Điều này thực thi hiệu quả ETLs thông tin từ một hệ thống khác và cần phải chạy mỗi giờ hoặc hơn xung quanh đồng hồ. Là một phần của quá trình xử lý, tệp thực thi sẽ khởi chạy giao diện người dùng kiểu Windows Forms nhỏ.Giải pháp cho thực tế là tác vụ được lập lịch trong Windows yêu cầu người dùng phải đăng nhập

Tôi đã thiết lập tác vụ theo lịch để gọi tệp và chỉ hoạt động nếu người dùng theo đó tác vụ được định cấu hình để chạy được đăng nhập vào máy (cục bộ hoặc qua Remote Desktop). Nếu tôi thiết lập nhiệm vụ để chạy như một người dùng khác, hoặc thiết lập nhiệm vụ để chạy khi người dùng không được đăng nhập, nhiệm vụ được lên lịch thực thi và lỗi. Tôi đã thử chạy với tư cách người dùng khác nhau bao gồm người dùng Quản trị viên và Người dùng hệ thống. Có cách giải quyết nào khác (không thay đổi mã của bên thứ ba mà tôi không có quyền truy cập vào) mà sẽ cho phép mã này được chạy mà không có người dùng cụ thể nào được đăng nhập.

+0

Thật lạ khi một tài khoản hệ thống thậm chí không thể thực thi các công việc. Tôi đang sử dụng tài khoản hệ thống để chạy nhiều tác vụ được lên lịch ở các khoảng thời gian khác nhau mà không gặp sự cố. Cũng nên có tùy chọn cho "Chỉ chạy nếu đã đăng nhập" mà bạn có thể bật hoặc di chuyển. – RobB

Trả lời

5

Ứng dụng GUI cần một máy tính để bàn và bạn chỉ nhận được một trong cho người dùng đã đăng nhập.

+0

Sau đó, làm thế nào mà một số ứng dụng GUI như OSK có thể chạy từ màn hình đăng nhập? – Synetech

+0

Tôi không biết nhiều về màn hình đăng nhập. Tôi đã đối chiếu các tác vụ được lập lịch chạy dưới dạng người dùng đã đăng nhập trên máy tính để bàn tương tác với những người chạy không có máy tính để bàn. –

1

Dường như từ nghiên cứu tôi đã thực hiện (và câu trả lời của David Heffernan), mà không ảnh hưởng đến mã nguồn, điều này là không thể.

Có một số suy nghĩ hữu ích về How can I run a Windows GUI application on as a service? liên quan đến điều này nhưng không có cách nào giải quyết được vấn đề này.

2

Tôi nghĩ rằng tôi đã tìm ra giải pháp cho tình huống này. Bạn cần có hai tài khoản người dùng trên máy chủ (User1 và User2). RMD vào máy chủ trong User1. Trong RMD này, hãy tạo tác vụ theo lịch của bạn và đặt nó để chạy trong tài khoản User2. Sau đó, từ trong RMD này, bạn cần phải RMD vào máy chủ chính nó bằng cách sử dụng thông tin User2 (loại giống như giấc mơ của Inception trong một giấc mơ). Điều quan trọng là không giảm thiểu cửa sổ RMD mới này; bạn có thể làm cho nó nhỏ, nhưng nó phải được mở. Sau đó bạn được tự do đóng phiên RMD gốc và tác vụ sẽ chạy trong tài khoản User2, vì User2 có một màn hình mở từ phiên RMD thứ 2 của bạn.

Protip - không bỏ ghim cửa sổ RMD ở phía trên cùng của cửa sổ RMD - có thể là nỗi đau khi đóng RMD chính xác. Nếu bạn làm như vậy, bạn sẽ cần sử dụng tùy chọn Start> Log Out tất cả các cách trong số RMD của bạn.

+1

Sáng tạo! Nhưng những gì một nỗi đau! – Chloe

4

Bài viết này cho thấy làm thế nào để tạo ra một nhiệm vụ mà không yêu cầu bất kỳ đăng nhập: https://www.scriptjunkie.us/2013/01/running-code-from-a-non-elevated-account-at-any-time/

Thủ tục được mô tả như sau:

Đầu tiên, tạo một nhiệm vụ theo lịch trình để chạy lệnh của bạn với các tùy chọn mặc định như là người dùng hiện tại (ý này theo mặc định tạo ra một nhiệm vụ theo lịch trình đó chỉ chạy khi bạn đang đăng nhập):

schtasks /create /tn mytask /SC HOURLY /TR "calc"

Sau đó xuất nhiệm vụ như XML:

schtasks /query /XML /tn mytask > temp.xml

và xóa các nhiệm vụ:

schtasks /delete /tn mytask /f

Sau đó mở file xml, và thay thế dòng <LogonType>InteractiveToken</LogonType> với <LogonType>S4U</LogonType>

Điều này có thể được thực hiện với các lệnh sau đây giả định powershell là trên hệ thống: powershell -Command "Get-Content '.\temp.xml' | foreach {$_ -replace 'InteractiveToken', 'S4U' }" > new.xml move /y new.xml temp.xml

Bây giờ tái nhiệm vụ từ tập tin XML chỉnh sửa:

schtasks /create /xml temp.xml /tn mytasks

và loại bỏ tập tin tạm thời của bạn:

del /f /q temp.xml

+0

Phần mà bạn thay thế InteractiveToken bằng S4U đã làm việc tuyệt vời cho tôi. Tôi tự hỏi tại sao đây không phải là một tùy chọn trong Task Scheduler. (sử dụng Windows 10) – User0

3

tôi có thể chậm trả lời, nhưng chúng ta không thể sử dụng theo lệnh, không có/tương tác ...

https://support.microsoft.com/en-us/kb/313565

Theo microsoft:/tương tác: Sử dụng tham số này để cho phép các nhiệm vụ để tương tác với máy tính để bàn của người dùng được đăng nhập vào tại thời điểm nhiệm vụ chạy.

0

Có một giải pháp đơn giản. Thay đổi nhóm thành "người dùng" nhóm địa phương và bạn sẽ không được nhắc nhập mật khẩu. (Tác vụ theo lịch - Chung - Tùy chọn bảo mật - Thay đổi người dùng hoặc nhóm).

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