我在服务器上有一个共享文件夹,需要远程执行一些文件上的命令。怎样做?
为了使其正常工作,服务器上需要哪些服务运行?
一些细节:只能使用C#,不能在服务器上安装任何程序。
另一种解决方案是使用WMI.NET或Windows Management Instrumentation。
通过使用.NET Framework命名空间System.Management,您可以使用Windows Management Instrumentation(WMI)自动化管理任务。
代码示例
using System.Management;
...
var processToRun = new[] { "notepad.exe" };
var connection = new ConnectionOptions();
connection.Username = "username";
connection.Password = "password";
var wmiScope = new ManagementScope(String.Format("\\\\{0}\\root\\cimv2", REMOTE_COMPUTER_NAME), connection);
var wmiProcess = new ManagementClass(wmiScope, new ManagementPath("Win32_Process"), new ObjectGetOptions());
wmiProcess.InvokeMethod("Create", processToRun);
如果您遇到身份验证问题,请检查DCOM配置。
dcomcnfg
。组件服务\计算机\我的电脑\DCOM配置
。8BC3F05E-D86B-11D0-A075-00C04FB68820
(您可以在详细信息视图中查看此内容)。注意: 用于远程进程的所有路径都需要在目标计算机上本地化。
你可以使用SysInternal的PsExec。
在您的情况下,您可以尝试以下方法:
- 将共享文件夹映射到计算机上的驱动器或文件夹中。(这里是如何操作)
- 像访问本地文件一样访问映射的驱动器/文件夹。
无需安装任何内容。除了启用文件夹共享的服务外,不需要运行其他服务。
如果您可以访问共享文件夹并将其映射到计算机上,则大多数功能应该与本地文件一样正常工作,包括命令提示符和所有资源管理器增强工具。
这与使用 PsExec(或 RDP 远程桌面连接)不同,因为您不需要在远程服务器上拥有管理员权限和/或远程桌面/终端服务连接权限,您只需要能够访问那些共享文件夹即可。
还要确保您具有运行想要在这些共享文件夹上运行的任何命令/工具所需的所有必要安全权限。
如果您希望在目标机器上进行处理,则可以尝试@divo和@recursive指出的PsExec,类似于:
PsExec \\yourServerName -u yourUserName cmd.exe
这将为您在远程计算机上提供一个命令提示符,从那里您可以执行任何操作。
我不确定,但我认为您需要运行服务器(lanmanserver
)或终端服务(TermService
)服务(应该已经在运行中)。
try
{
string AppPath = "\\\\spri11U1118\\SampleBatch\\Bin\\";
string strFilePath = AppPath + "ABCED120D_XXX.bat";
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = strFilePath;
string pwd = "s44erver";
proc.StartInfo.Domain = "abcd";
proc.StartInfo.UserName = "sysfaomyulm";
System.Security.SecureString secret = new System.Security.SecureString();
foreach (char c in pwd)
secret.AppendChar(c);
proc.StartInfo.Password = secret;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.WorkingDirectory = "psexec \\\\spri11U1118\\SampleBatch\\Bin ";
proc.Start();
while (!proc.HasExited)
{
proc.Refresh();
// Thread.Sleep(1000);
}
proc.Close();
}
catch (Exception ex)
{
throw ex;
}