인가 Windows 호스트에서 프로그램을 실행 WinExe 같은 유사한 도구가 있습니다 Windows를 실행하는 원격 컴퓨터? 그렇다면 델파이에서 항상 "psexec"를 호출 할 수 있습니다. 또는 WMI를 사용하여 프로세스를 원격으로 실행할 수 있습니다 (원격 호스트에서 일부 Windows 버전을 실행한다고 가정)
여기에 Delphi의 전체 예제 taken from here이 있습니다. Delphi 2007에서 "구성 요소 가져 오기 | 형식 라이브러리 가져 오기"메뉴 옵션을 사용하여 % windir % \ System32 \ wbem \ wbemdisp.tlb 유형 라이브러리를 설치하여 만들 수있는 WbemScripting_TLB 단위가 필요합니다.
unit Unit1;
interface
uses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls,
ComCtrls;
type
TForm1 = class(TForm)
btnExecute: TButton;
edtProgramToExecute: TEdit;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
edtRemoteMachine: TEdit;
edtUser: TEdit;
edtPassword: TEdit;
procedure btnExecuteClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses WbemScripting_TLB;
function remoteExecute(programName: string; machine: string = ''; user: string = '';
password: string = ''): string;
var
SWbemLocator1: TSWbemLocator;
Service: ISWbemServices;
InParam,
OutParam, SObject: ISWbemObject;
Method: ISWbemMethod;
SProp1
, SProp2, MyProperty
: ISWbemProperty;
s, methodName: string;
PropValue: OleVariant;
begin
methodName := 'Create';
// CoInitialize(nil);
SWbemLocator1 := TSWbemLocator.Create(nil);
if machine = '' then
machine := '.';
Service := SWbemLocator1.ConnectServer(machine, 'root\CIMV2', user, password, '', '',
0, nil);
Service.Security_.Set_ImpersonationLevel(wbemImpersonationLevelImpersonate);
SObject := Service.Get('Win32_Process', 0, nil);
Method := SOBject.Methods_.Item(methodName, 0);
InParam := Method.InParameters.SpawnInstance_(0);
MyProperty := InParam.Properties_.Add('CommandLine', wbemCimtypeString, False, 0);
PropValue := programName;
MyProperty.Set_Value(PropValue);
MyProperty := InParam.Properties_.Add('CurrentDirectory', wbemCimtypeString, False, 0);
PropValue := Null;
MyProperty.Set_Value(PropValue);
MyProperty := InParam.Properties_.Add('ProcessStartupInformation', wbemCimtypeObject,
False, 0);
PropValue := Null;
MyProperty.Set_Value(PropValue);
OutParam := SObject.ExecMethod_(methodName, InParam, 0, nil);
// OutParam:= SObject.ExecMethod_(methodName, nil, 0, nil);
SProp1 := outParam.Properties_.Item('ReturnValue', 0);
SProp2 := outParam.Properties_.Item('ProcessId', 0);
case SProp1.Get_Value of
0: s := 'Successful completion.';
2: s := 'Access denied.';
3: s := 'Insufficient privilege.';
8: s := 'Unknown failure.';
9: s := 'Path not found.';
21: s := 'Invalid parameter.';
else
s := 'Unknown reply code!';
end;
SWbemLocator1.Free;
service := nil;
SObject := nil;
OutParam := nil;
SProp1 := nil;
result := s + '(PID=' + inttostr(SProp2.Get_Value) + ')';
// CoUninitialize;
end;
procedure TForm1.btnExecuteClick(Sender: TObject);
begin
statusbar1.simpletext := remoteExecute(edit1.text, edit2.text, edit3.text, edit4.text);
end;
end.
또한 VBScript로이 작업을 수행 할 수 있습니다 당신은 이미 수동으로 무엇을 자동화의 정신
Here's a VBScript snippet that demonstrates how this would work.
' This script provides a function for executing a command on a remote computer
' This uses WMI and requires that you have administrative righs on the remote machine
'
Dim strComputer, strCommandLineToRun
'change the period to an IP Address or computer name
strComputer = "." 'example: strComputer = "192.168.1.105"
'this is the path to the file on the computer whose name/IP address is stored in the strComputer variable
strCommandLineToRun = "c:\windows\system32\calc.exe"
' This calls the function to run the process on a remote computer
RemoteExecute strComputer,"","",strCommandLineToRun
Function RemoteExecute(strServer, strUser, strPassword, CmdLine)
Const Impersonate = 3
RemoteExecute = -1
Set Locator = CreateObject("WbemScripting.SWbemLocator")
Set Service = Locator.ConnectServer(strServer, "root\cimv2", strUser, strPassword)
Service.Security_.ImpersonationLevel = Impersonate
Set Process = Service.Get("Win32_Process")
result = Process.Create(CmdLine, , , ProcessId)
If (result <> 0) Then
WScript.Echo "Creating Remote Process Failed: " & result
Wscript.Quit
End If
RemoteExecute = ProcessId
End Function
그냥 수동으로 수행하는 작업을 자동화하십시오. –
어떤 부분에 문제가 있습니까? 원격 컴퓨터에 연결하거나, 프로그램을 실행하거나, * Perl 스크립트 *를 실행하고 있습니까? –