我有两台机器:Server&客户端
服务器计算机:创建一个Console .Net应用程序,它实例化Excel Interop并为工作簿调用RefreshAll方法。
static void Main(string[] args)
{
MyApp = new Excel.Application();
MyApp.Visible = false;
MyApp.DisplayAlerts = false;
MyBook = MyApp.Workbooks.Open(@"C:\RefreshSample.xlsm");
Console.WriteLine("Giving refresh call..");
MyBook.RefreshAll(); //refreshes pivots within workbook
MyBook.SaveAs(@"C:\Copy1.xlsm");
Console.WriteLine("Excel Refresh call finished");
MyBook.Close();
MyApp.Quit();
}
客户端计算机:创建一个使用WMI调用远程服务器.Net控制台应用程序的Console .Net应用程序
public static void Main()
{
ConnectionOptions options = new ConnectionOptions();
ManagementScope scope = new ManagementScope("\\\\remoteIP\\root\\cimv2", options);
scope.Connect();
// Get the object on which the
// method will be invoked
ObjectGetOptions objectGetOptions = new ObjectGetOptions();
ManagementPath managementPath = new ManagementPath("Win32_Process");
ManagementClass processClass = new ManagementClass
(scope, managementPath, objectGetOptions);
object[] methodArgs = { @"C:\RefreshExcelConnections.exe", null, null, 0 };
//Execute the method
object result = processClass.InvokeMethod("Create", methodArgs);
//Display results
Console.WriteLine("Creation of process returned: " + result);
Console.WriteLine("Process id: " + methodArgs[3]);
Console.ReadKey();
}
观察:
问题:
客户端和服务器计算机都在同一个域中,我在相同的域帐户下运行客户端应用程序,该帐户也添加到服务器计算机上的管理员组。
有任何线索吗?
更新 使用 PsExec ,我能够以交互模式打开服务器应用程序。因此,在这种情况下不使用使用WMI的客户端应用程序。这是我在客户端计算机上以交互模式打开服务器应用程序的命令。
psexec -i 0 \\RemoteServer C:\FolderPath\RefreshExcelConnections.exe
有一个弹出窗口出现在远程服务器上,它会卡住。该弹出窗口标题为"多维连接11.0"它要求分析服务器名称和凭据。我尝试在弹出窗口中提供凭据但是它给出了错误"打开连接失败"没有任何具体错误。我还检查了数据连接文件(.ODC)是否放在C:中,并且运行应用程序的用户可以访问它。而且这个Windows用户也可以访问Cube服务器。所以我不确定为什么在远程调用执行期间会弹出这个连接错误。