7

Tôi có một số máy phụ và máy chủ chạy cùng nhau với ứng dụng phân tán. Các quá trình trên mỗi máy phụ thuộc phải có một GUI và truy cập mạng (tôi nghĩ nó sẽ được gọi là một quá trình tương tác). Để dễ sử dụng, sẽ tốt hơn nếu máy chủ có thể khởi động/dừng các quá trình trên các máy phụ thuộc này. Ý tưởng đầu tiên của tôi là sử dụng WMI và lớp Win32_Process để bắt đầu một quá trình từ xa nhưng khi điều tra thêm, các quá trình bắt đầu theo cách này là không tương tác và bị cô lập, và do đó không thể có bất kỳ GUI nào. Một lưu ý nói rằng người ta có thể sử dụng Win32_ScheduledJob.Create để tạo ra một quá trình tương tác từ xa, nhưng nó chạy dưới tài khoản LocalSystem mà tôi muốn tránh (còn tôi thậm chí không thể làm cho nó chạy đúng).Bắt đầu quá trình từ xa trong mạng Windows

Điều gì sẽ là cách tốt để giải quyết vấn đề này? Có thể khởi chạy một ứng dụng trợ giúp mà lần lượt bắt đầu một quá trình thích hợp, nhưng điều đó có vẻ khá bẩn.

Chỉnh sửa: PsExec thực sự rất khó khăn khi tôi thử nó và làm chậm địa ngục (không chắc chắn lý do). Nhìn xa hơn tại PsExec, có vẻ như nó cài đặt một dịch vụ tạm thời trên máy từ xa để khởi động ứng dụng. Đây có phải là cách duy nhất để sinh ra một quá trình tương tác bằng cách sử dụng một bản sắc thích hợp? Tôi có nên bao gồm một dịch vụ trợ giúp trong thiết lập cho các nút? Nhưng ngay cả sau đó, tôi sẽ giao tiếp với nó như thế nào?

Trả lời

6

PsExec là một phần của bộ ứng dụng Sysinternals có thể làm điều đó

http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

Nếu máy chủ của bạn đang chạy Windows 2008, bạn cũng có thể sử dụng

Terminal Services Remote App

+0

Khi tôi thử PsExec, nó khá chậm (không chắc chắn lý do) và không hoạt động chính xác. Các ứng dụng GUI sẽ được khởi chạy, dưới đúng tài khoản, có thể được nhìn thấy trong thanh tác vụ, nhưng GUI thực tế không bao giờ được cập nhật và chỉ có một "khối" đã chết được hiển thị. – gix

1

Bạn có thể sử dụng "tại " chỉ huy.

mở một dòng lệnh và gõ

at /? 

Into the terminal. Một nhược điểm là thời gian trên hệ thống từ xa cần phải nằm trong một số vùng đồng bằng hợp lý của bạn. Nó cũng không tức thời. Bạn phải đợi một vài giây để đảm bảo rằng trình lên lịch từ xa không bỏ lỡ hoàn toàn sự kiện.

Có một WMI tương đương với điều này, và có những hãy cẩn thận cơ bản tương tự như tại địa chỉ:

LISTING 3: Mã để tạo ra một quá trình tương tác trên Windows Server 2003, Windows XP, và Win2K SP3 Máy

Const INTERVAL = "n" 
Const MINUTES = 1 

strComputer = "compaq575" 
strCommand = "calc.exe" 

Set objWMIService = _ 
    GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
Set objScheduledJob = objWMIService.Get("Win32_ScheduledJob") 

Set objSWbemDateTime = _ 
    CreateObject("WbemScripting.SWbemDateTime") 
objSWbemDateTime.SetVarDate(DateAdd(INTERVAL, _ 
    MINUTES, Now())) 

intReturnValue = objScheduledJob.Create(strCommand, _ 
    objSWbemDateTime.Value, False, 0, 0, True, intJobID) 
WScript.Echo "Job ID: " & intJobID 

Tôi nghĩ hầu hết các cách khác để thực hiện (không cài đặt dịch vụ của riêng bạn) đã bị tắt bởi các gói dịch vụ khác nhau do lỗ hổng bảo mật.

1

Nếu nhóm enire được kiểm soát hợp lý, có thể thực hiện các quy trình từ xa này dưới dạng Dịch vụ Windows. Một dịch vụ có thể tương tác (không theo mặc định) và nó có thể được điều khiển từ xa thông qua Trình quản lý Điều khiển Dịch vụ tiêu chuẩn đang chạy trên mỗi PC Windows.

+0

Bạn có chắc chắn một dịch vụ có thể tương tác không? Tôi có một dịch vụ tôi giao tiếp với thông qua hangfire, trên máy ảo đang chạy Windows server 2012 và tôi không thể chạy dịch vụ để chạy tương tác ... – EluciusFTW

+0

@EluciusFTW: Bạn không thể nhận các dịch vụ ngẫu nhiên để chạy tương tác, nhưng ở đây trên StackOverflow I giả sử tôi đang giải quyết nhà phát triển dịch vụ. – MSalters

+0

Tôi muốn nhận dịch vụ tự viết của mình (được viết bằng C# sử dụng TopShelf) để chạy tương tác. Bất kỳ ý tưởng? Xem tại đây: http://stackoverflow.com/questions/39721393/service-does-not-execute-command-on-windows-server-2012 – EluciusFTW

0

Bộ công cụ PSTools được phát triển bởi Sysinternals và thật tuyệt vời khi công ty được Microsoft mua lại một thời gian sau đó. Sử dụng những công cụ này là cách tốt nhất để hoàn thành nhiệm vụ của bạn.

Tôi thấy bạn đã đề cập đến sự cố khi chạy các ứng dụng tương tác. Tôi khuyên bạn nên sử dụng nút chuyển/i để chạy ứng dụng tương tác. PSTools cung cấp tất cả các chức năng bạn đang tìm kiếm. Bạn chỉ cần chơi xung quanh với các thiết bị chuyển mạch để có được kết quả mong muốn của bạn.

Tôi chưa bao giờ gặp phải sự chậm trễ mà bạn mô tả trong các ứng dụng sử dụng PSTools của tôi.

1

Tôi có thể hỏi tại sao các quy trình nô lệ cần phải có GUI không? Tôi có một thiết lập tương tự, nhưng chỉ cần một GUI khi thiết lập ban đầu.

Dù sao, đây là những gì tôi đã làm, nhưng tiếc là nó dựa trên quá trình chạy như tài khoản LocalSystem, mà tôi hiểu bạn đang cố gắng tránh, nếu bạn thực sự cần GUI.

Để cung cấp cho bạn một chút nền, ứng dụng tôi đã phân phối là Hudson và đây là phiên bản cũ hơn, nơi bạn phân phối nó bằng cách chạy một ứng dụng Java WebStart. ít nhất trong khi thiết lập, để giúp khắc phục sự cố).

Những gì tôi đã làm là thiết lập các ứng dụng nô lệ làm dịch vụ trên các máy phụ bằng cách sử dụng sc.exe (đây là một PITA để có quyền, may mắn thay bạn chỉ làm điều này một lần). Nội dung nào đó dọc theo dòng:

sc.exe create SlaveService binPath= c:\path\to\slave.exe type= interact DisplayName= "The Slave Service" 

Lưu ý khoảng trắng sau thông số (binPath = v.v), những thứ này là cần thiết. Cũng lưu ý rằng tôi thấy dễ dàng hơn khi thả "type = interact" và thay đổi thủ công nó trong bảng điều khiển dịch vụ.

Sau đó, trên tổng thể, cũng sử dụng sc.exe, tôi bắt đầu dịch vụ từ xa:

sc.exe \\slavemachine start SlaveService 

Và xác minh rằng chương trình đã được chạy trên máy nô lệ.

Hiện tại, trong trường hợp của tôi, tôi không thực sự cần GUI, ngoài việc khắc phục sự cố ban đầu. Ngay sau khi tôi có mọi thứ chạy đúng cách, tôi chỉ cần định cấu hình dịch vụ để chạy dưới dạng tài khoản dịch vụ, nhưng không còn ở chế độ tương tác nữa.

Tôi hy vọng bạn thấy điều này hữu ích.

+0

Câu trả lời rất muộn * duck *. Các quy trình cần một GUI vì đây là một hình ảnh trên nhiều máy và màn hình (powerwall). – gix

1

Có một vài thành phần bạn cần thực hiện điều này.

Trước tiên, bạn sẽ cần một phương thức giao tiếp với máy từ xa.

Thứ hai, bạn sẽ cần thứ gì đó trên máy nghe từ xa có thể khởi động ứng dụng của bạn.

Các đề xuất khác ở trên tất cả đều sử dụng một cái gì đó được tích hợp cho một hoặc cả hai thành phần này, điều này là tốt, miễn là các hạn chế của bất kỳ giải pháp nào là thích hợp.

PsExec trông giống như giải pháp out-of-the-box hứa hẹn nhất. Nếu không, bạn có thể cuộn ứng dụng của riêng bạn để nghe các tin nhắn đơn giản thông qua TCP/tên đường ống/bất cứ điều gì và chỉ sinh ra các quy trình phụ thích hợp. Lời nhắc duy nhất với điều đó là bạn sẽ muốn được khá cẩn thận xung quanh an ninh, đặc biệt là nếu bất kỳ máy nào được tiếp xúc công khai.

0

MPICH2 thường được sử dụng trong các cụm Máy tính hiệu suất cao và có thể thực hiện những gì bạn muốn. Ngay cả khi bạn không sử dụng nó để truyền các thông điệp giữa các máy, bạn có thể sử dụng trình khởi chạy quy trình của nó để bắt đầu tất cả các tiến trình từ máy chủ. Nó có thể được thiết lập để xác thực như một người dùng Windows cụ thể trên các máy.

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