从带有参数的应用程序执行另一个EXE,如admin

时间:2016-06-02 12:53:58

标签: c# .net parameter-passing exe elevated-privileges

我在同一个解决方案下创建了两个项目。 ProjectA是一个Windows窗体应用程序,ProjectB是一个简单的控制台应用程序.ProjectB将从具有管理员权限的ProjectA执行。
来自ProjectA的样本

private void btnFinish_Click(object sender, EventArgs e)
        {
            ipAddress = txtIP.Text;
            bindingPort = txtPort.Text;
            if (!fileChosen)
            {
                CreateCertificate();
                //
            }
            //After this step i want to execute ProjectB with admin provileges with 3 parameters
            ExecuteB_AsAdminWithPrivileges(ipAddress, bindingPort, serverCert);
        }
    }

因此,当我单击按钮名称完成时,我希望使用我将从ProjectA提供的参数执行ProjectB.exe。
ProjectB看起来像是:

public static void StoreAndBindCertificate(string pfxFileServerCert, string ipAddress, string ipPort)
        {
//
}

这是将使用ProjectA中的参数的方法 如何在ProjectB中将参数从ProjectA获取到此方法?

2 个答案:

答案 0 :(得分:1)

<强>更新

ProgramA{
string ip ="123.123.123";
File.WriteAllText("c://MtDataFromA.txt","ip="+ip);
}


private void btnFinish_Click(object sender, EventArgs e)
            {
                ipAddress = File.WriteAllText("c://MtDataFromA.txt");//some algorithem to find the ip from text file

    }


public static void StoreAndBindCertificate(string pfxFileServerCert, string ipAddress, string ipPort){


        // Use ProcessStartInfo class
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.CreateNoWindow = false;
        startInfo.UseShellExecute = false;
        startInfo.FileName = "YourFile.exe";
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.Arguments = "ipAddress"+" " +"ipPort";

        try
        {
            // Start the process with the info we specified.
            // Call WaitForExit and then the using statement will close.
            using (Process exeProcess = Process.Start(startInfo))
            {
                exeProcess.WaitForExit();
            }
        }
catch
        {
             // Log error.
        }
}

link

答案 1 :(得分:0)

您可以使用此方法:

public static int RunProcessAsAdmin(string exeName, string parameters)
{
    try {
        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
        startInfo.UseShellExecute = true;
        startInfo.WorkingDirectory = CurrentDirectory;
        startInfo.FileName = Path.Combine(CurrentDirectory, exeName);
        startInfo.Verb = "runas";
        //MLHIDE
        startInfo.Arguments = parameters;
        startInfo.ErrorDialog = true;

        Process process = System.Diagnostics.Process.Start(startInfo);
        process.WaitForExit();
        return process.ExitCode;
    } catch (Win32Exception ex) {
        WriteLog(ex);
        switch (ex.NativeErrorCode) {
            case 1223:
                return ex.NativeErrorCode;
            default:
                return ErrorReturnInteger;
        }

    } catch (Exception ex) {
        WriteLog(ex);
        return ErrorReturnInteger;
    }
}

第一个参数是您的.exe文件,第二个参数是您要为.exe文件提供的参数 在此之后,您应该在main部分的.exe文件中进行更改。 类似的东西:

static void Main(string[] args)
        {
            if (args.Length <= 1) return;

            try
            {
                if (args.Length == 2)
                {
                    _IpAddress = args[0];
                    _IpPort = args[1];
                    FunctionName(_IpAddress, _IpPort);
                }
                else
                {
                    _return
                }
            }
            catch (Exception)
            {
                throw new Exception("Invalid number of parameters!");
            }
        }

我希望这会有所帮助。