使用WMI在远程系统上调用应用程序(具有参数的自定义应用程序)

本文关键字:应用程序 WMI 参数 自定义 调用 程系统 系统 使用 | 更新日期: 2023-09-27 17:49:42

我有一个自定义应用程序安装或其他系统&我想在这个系统中使用WMI c#来调用它,而不需要任何批处理文件。

此外,该应用程序有命令参数要运行。所以,谁能指导我应该写什么代码?

我已经尝试了一些东西,我在这里粘贴(代码片段)供您参考,在Notepad.exe或Calc.exe运行的情况下工作良好。事实上,它在我的自定义应用程序中也适用于不带参数但不带参数的应用程序。当我传递参数时它开始&2秒后杀死敌人。这意味着它不能以正确的格式传递参数。

private static uint CreateProcess(ManagementScope connectionScope, string exeWithPathAndArguments)
    {
        try
        {
            var objectGetOptions = new ObjectGetOptions();
            ManagementPath processPath = new ManagementPath("Win32_Process");
            using (var processTask = new ManagementClass(connectionScope, processPath, objectGetOptions))
            {
                using (var methodInParams = processTask.GetMethodParameters("Create"))
                {
                    methodInParams["CommandLine"] = exeWithPathAndArguments;
                    using (var methodOutParams = processTask.InvokeMethod("Create", methodInParams, null))
                    {
                        var err = (uint)methodOutParams["returnValue"];
                        if (err != 0)
                        {
                            var info = "see http://msdn.microsoft.com/en-us/library/windows/desktop/aa389388(v=vs.85).aspx";
                            switch (err)
                            {
                                case 2: info = "Access Denied"; break;
                                case 3: info = "Insufficient Privilege"; break;
                                case 8: info = "Unknown failure"; break;
                                case 9: info = "Path Not Found"; break;
                                case 21: info = "Invalid Parameter"; break;
                                default: info = "Unknown(Code)"; break;
                            }
                            var msg = "Failed to Start the Process, error = " + methodOutParams["returnValue"] + " (" + info + ")";
                            throw new Exception(msg);
                        }
                        return (uint)methodOutParams["processId"];
                    }
                }
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

我已经意识到PSExec,但我不想使用它。同时,我不想使用批处理文件来运行我的命令。只想使用直接命令传递的方式来运行应用程序。我的应用程序位置不在PATH目录中。显然,我需要提供一个完整的路径,比如…

CreateProcess (connectionScope exeWithPathAndArguments.Trim ());其中exeWithPathAndArguments将是"/"C:'Program files (x86)'Company'Application Folder'app.exe/" -argsName argvalue"

使用WMI在远程系统上调用应用程序(具有参数的自定义应用程序)

添加methodInParams["CurrentDirectory"] = wheretostartapp;,删除-argsName

那么你的exeWithPathAndArguments将是:

'"C:''''Program files (x86)''''Company''''Application Folder''''app.exe'" argvalue