Khởi động chương trình khi khởi động máy tính khi không có ai đăng nhập và hiển thị cửa sổ khi ai đó đăng nhập (HĐH: Windows)


19

Tôi có một chương trình được khởi chạy khi khởi động hệ thống bằng Trình lập lịch tác vụ trên Windows Server 2012. Chương trình phải khởi động ngay cả khi máy tính khởi động lại tự động.

Quản trị viên là tài khoản được sử dụng để khởi động chương trình, tùy chọn "Chạy cho dù người dùng có đăng nhập hay không" được kiểm tra cho tác vụ.

Vấn đề với điều này là khi cuối cùng ai đó đăng nhập với tư cách Quản trị viên bằng Remote Desktop Connection, giao diện (cửa sổ chương trình) bị ẩn.

Theo tôi hiểu, không có cách nào để giải quyết vấn đề này bằng cách sử dụng Trình lập lịch tác vụ.

Làm sao tôi có thể giải quyết việc này?

Đây có thể là một vấn đề khá phổ biến nhưng tôi không thể tìm thấy bất cứ điều gì bằng cách tìm kiếm trên mạng. Tôi khá ngạc nhiên khi Microsoft cho phép giới hạn như vậy trong lịch trình của họ. Tôi có thể tạo VBScript hoặc thứ gì đó chạy khi khởi động và khởi chạy chương trình sẽ hiển thị khi người dùng thực sự đăng nhập không?

Những ý tưởng khác?

(Tôi không muốn phải tạo một chương trình chỉ dành riêng cho GUI kết nối với chương trình gốc. Tôi cũng thích nó hơn nếu tôi không phải chấm dứt chương trình đã chạy khi đăng nhập người dùng và sau đó khởi chạy nó một lần nữa.)


2
Firedaemon, cài đặt ứng dụng dưới dạng dịch vụ, khi RDPed chuyển sang "Phiên 0" bằng Firedaemon. Xem ứng dụng.
TheCleaner

Điều này về mặt kỹ thuật có thể được thực hiện nếu bạn phát triển dịch vụ của riêng bạn.
Ryan Ries

1
Chỉ cần trả lời câu hỏi của riêng tôi. Tuy nhiên, tôi không thể chấp nhận câu trả lời của mình trong hai ngày, bởi vì hệ thống tại serverfault.com rất tệ (hầu hết mọi người bây giờ sẽ bỏ trang này mà không đợi hai ngày và để lại câu hỏi được đánh dấu là chưa được giải quyết).
Marcus

2
@Marcus: Các giới hạn về người có thể làm gì và khi nào có ý định ngăn chặn một số hành vi lạm dụng. Thật không may, đôi khi chúng gây ra sự bất tiện cho những nỗ lực thực sự để làm mọi thứ đúng, nhưng đôi khi những thỏa hiệp như vậy cần phải được thực hiện. Nếu bạn có một đề xuất có thể cải thiện tình hình (ít nhất là bảo vệ trang web nhưng ít gây phiền hà cho người dùng chính hãng), bạn nên nâng cao suy nghĩ thông qua một trang web "meta" có liên quan ( meta.serverfault.com , meta. stackoverflow.com ) thay vì phàn nàn trong một bình luận mà người chạy trang web rất khó nhìn thấy.
David Spillett

Như bạn có thể thấy từ cuộc bỏ phiếu, câu trả lời bạn muốn chấp nhận không phải là câu trả lời mà mọi người tán thành vì cách bạn đang cố gắng thực hiện điều này là sai khi bắt đầu.
JamesRyan

Câu trả lời:


28

Tìm hiểu làm thế nào để làm điều đó bản thân mình. Đó là một phần của một cách giải quyết nhưng đó là những gì tôi mong đợi nhận được.

Dừng lại! Đừng co rúm lại. Đọc trên ...

  • Chạy nó, đặt nó để Quản trị viên nên đăng nhập tự động.

  • Tạo một tác vụ trong Trình lập lịch tác vụ. Đặt nó chỉ chạy khi người dùng (Quản trị viên) được đăng nhập. Kích hoạt là "lúc đăng nhập" và chỉ định rằng đó chỉ là khi Quản trị viên đăng nhập.

  • Tạo một nhiệm vụ thứ hai. Chỉ chạy khi người dùng đăng nhập, kích hoạt tại quản trị viên đăng nhập. Hành động phải là "bắt đầu một chương trình" và chương trình là "C: \ Windows \ System32 \ rundll32.exe" với trường đối số được đặt thành "user32.dll, LockWorkStation".

Điều gì xảy ra bây giờ nếu bạn khởi động lại máy tính là Quản trị viên tự động đăng nhập, chương trình bạn muốn bắt đầu được khởi động và trạm làm việc bị khóa. Nếu tôi đăng nhập qua Remote Desktop Connection, tôi có thể thấy cửa sổ chương trình và sử dụng GUI. Tôi có thể khóa / mở khóa máy tính mà không gặp vấn đề gì và ngắt kết nối / kết nối lại nếu muốn. Không có vấn đề gì nếu tôi đến máy chủ và đăng nhập tại máy trạm thực tế. Vì Quản trị viên đã đăng nhập, tác vụ sẽ không chạy lại (nó không tạo ra một số vòng đăng nhập vô hạn mà bạn không thể thoát ra).

Đơn giản như thế. Được cho là có một khoảng thời gian một giây trước khi máy tính bị khóa sau khi đăng nhập tự động và tôi đoán một hacker chuyên nghiệp có quyền truy cập vật lý vào máy tính có thể làm điều gì đó lén lút trong cửa sổ thời gian này nhưng trong trường hợp của tôi, tôi có thể bỏ qua nguy cơ bảo mật đó. Miễn là tôi không cho phép bất kỳ tin tặc chuyên nghiệp nào vào nhà tôi và cho họ xem máy tính thì hệ thống sẽ tương đối an toàn. Trên hết, không có nhiều giá trị trên máy tính cần bảo vệ siêu vault nên tôi khá hài lòng với giải pháp này.


7
Không thiếu tôn trọng (hoặc downvote), Marcus. Nhưng nếu đây thực sự là loại câu trả lời mà bạn đang tìm kiếm, thì câu hỏi này sẽ phù hợp hơn với SuperUser .
Ryan Bolger

2
Thật không dễ dàng để quyết định trao đổi ngăn xếp nào để đăng bài này.
Marcus

Xin chào Marcus, tôi đã làm theo câu trả lời của bạn nhưng tôi gặp vấn đề khi khởi chạy hai chương trình với GUI thay vì chỉ một. Tôi đã đăng một câu hỏi trong SuperUser. Nếu bạn có thể trả lời thì đó sẽ là một sự trợ giúp tuyệt vời - superuser.com/questions/902386/ trên
user2162550

1
Trên thực tế bây giờ cũng hạ thấp điều đó bởi vì nó KHÔNG phải là một câu trả lời cho câu hỏi. Câu hỏi xác định rõ ràng buổi trưa được đăng nhập - và "giải pháp" của bạn ở đây thực hiện đăng nhập tự động (vì vậy ai đó đã đăng nhập). Có thể không thông minh trong câu hỏi, nhưng câu hỏi là như vậy.
TomTom

1
@TomTom Là một tùy chọn được trình bày cho người dùng cuối "Chạy cho dù người dùng có đăng nhập hay không" chắc chắn có thể có nghĩa là "Bạn sẽ không phải ở đây để giữ trẻ để đảm bảo nó bắt đầu."
Aryeh Leib Taurog

16

Tôi có một chương trình được khởi chạy khi khởi động hệ thống bằng Trình lập lịch tác vụ trên Windows Server 2012. Chương trình phải khởi động ngay cả khi máy tính khởi động lại tự động.

Vậy thì tại sao bạn không biến nó thành một dịch vụ hệ thống, như thông số kỹ thuật của windows xác định?

Làm sao tôi có thể giải quyết việc này?

Bạn không thể. Các chương trình nền không được phép tương tác với UI. Hoặc: UI nên chạy chương trình riêng của nó sau đó kết nối với dịch vụ. Giao diện người dùng đang chạy trong không gian người dùng của người dùng đã đăng nhập thực hiện bản trình bày, dịch vụ windows thực hiện xử lý. Đây là cách mô hình được thiết kế trong khoảng 15 năm hoặc lâu hơn.

Tôi khá ngạc nhiên khi Microsoft cho phép giới hạn như vậy trong lịch trình của họ.

Tôi ngạc nhiên hơn bạn không bao giờ đóng chai để hỏi tại sao.

Có nhiều vấn đề:

  • Khi nhiều người đăng nhập, ai có được UI?
  • Khi người dùng đăng xuất, bạn giết chương trình? NGOÀI.
  • Bảo vệ. Chương trình nền có thể chạy dưới các quyền hạn chế - hiển thị UI cho người dùng nghĩa là người dùng có thể thực thi mã ở đó. Mô hình nhắn tin windows này là - ah - đầy vấn đề.

Tôi không muốn phải tạo một chương trình chỉ dành riêng cho GUI kết nối với chương trình gốc.

Cả tôi và Microsoft đều không quan tâm đến điểm này bạn muốn làm gì. Có một mô hình được thiết lập và hỗ trợ để gắn xử lý nền vào giao diện người dùng đã đăng nhập - sử dụng nó hoặc không. Nhưng khi không, đừng bao giờ nói về các vấn đề bảo mật mà bạn đưa ra.


3
Amen. Tôi muốn nhiều nhà cung cấp ứng dụng nắm bắt khái niệm này.
Ryan Bolger

15
Wow không phải là bạn snooty trong thái độ của bạn. Chà, đoán là tôi hết may rồi. Trừ khi bạn hiểu sai và ai đó có cách nào đó để giải quyết vấn đề này, mọi người đều không thể biết mọi thứ nên bạn có thể sai với phần "bạn không thể" tuyệt đối trong bài đăng của mình. Tôi muốn để câu hỏi mở để có thêm câu trả lời trong một thời gian dài, chỉ trong trường hợp bất kỳ ai có cách giải quyết không phổ biến để chia sẻ. Khác tôi sẽ chấp nhận câu trả lời của bạn.
Marcus

Ngày nay, việc cung cấp UI cho một dịch vụ trên các phiên bản Windows hiện tại ngày càng khó, nhưng không phải là không thể.
MDMoore313

Đó là chủ động không muốn vì chủ yếu là mối quan tâm bảo mật. Vấn đề chính ở đây là - và bạn thực sự cần phải có được điều đó - nếu bạn hiển thị một cửa sổ trong UI của tôi, tôi có thể thực thi mã trong quy trình của bạn. Sau đó tôi có thể gửi cho bạn các tin nhắn windows và có TON thứ có thể khai thác. Thông thường không phải là vấn đề - bởi vì nếu đó là ứng dụng người dùng, tôi chỉ có thể làm những việc mà tôi với tư cách là người dùng có thể .... nhưng nếu dịch vụ có quyền riêng tư cao hơn, thì đây là cơn ác mộng bảo mật. Đây là lý do tại sao điều này đã bị đóng cửa từ nhiều năm trước và mọi người đã học lập trình và đọc tài liệu nên đọc về nó
TomTom

1
Nếu bạn thực sự muốn đến đó, bạn có thể thử các bước trong coretechnology.com/WindowsService/FAQ.html#GUIService - không chắc chắn chúng vẫn hoạt động trong các cửa sổ hiện tại nhưng có nhiều cách để tạo UI truy cập - và mở tất cả các vấn đề bảo mật .
TomTom

0

Đó là tất cả về Sessionchương trình của bạn chạy. Nếu không có ai đăng nhập, không có phiên tương tác nào để hiển thị, tôi tin rằng nó chạy bên dưới Session 0, có giao diện người dùng kỳ lạ không hiển thị như những người khác.

Bây giờ, nếu chương trình của bạn phát hiện khi explorer.exekhởi chạy (hoặc một số cách khác để phát hiện đăng nhập của người dùng) và tự định dạng lại một cách kỳ diệu hoặc sinh ra một số tiến trình con trên sessionid mới đó, thì bất cứ ai đăng nhập sẽ vui vẻ xem bạn đang làm gì.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.