C# 取得本机进程启动命令行参数

本文介绍了一种利用Windows Management Instrumentation (WMI)来检索特定进程的命令行参数的方法。通过C#示例代码展示了如何针对指定进程ID查询其启动时的命令行参数。

using System.Management;

private void WmiTest()
{
	using (ManagementObjectSearcher mos = new ManagementObjectSearcher(
		"SELECT CommandLine FROM Win32_Process WHERE ProcessId = 1234"))
	{
		foreach (ManagementObject mo in mos.Get())
		{
			Console.WriteLine(mo["CommandLine"]);
		}
	}
}

参考这里https://social.msdn.microsoft.com/forums/vstudio/en-US/8efe163b-927e-4895-9983-b8c47b515d7c/how-to-get-the-command-line-parameters-from-a-different-process-in-c



### C#启动 .exe 文件并指定参数的示例 在 C# 编程环境中,可以通过 `System.Diagnostics.Process` 类来启动外部 `.exe` 文件,并向其传递参数。以下是具体实现方法: #### 使用 `Process.Start()` 方法启动参数的 `.exe` 文件 可以利用字符串拼接的方式将目标程序路径及其所需参数组合起来作为输入。 ```csharp using System; using System.Diagnostics; class Program { static void Main() { try { string targetExePath = "program.exe"; // 替换为目标应用程序的实际路径 string arguments = "参数1 参数2 参数3"; // 设置要传递给目标程序的具体参数 ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = targetExePath; // 指定要运行的应用程序名称或路径 startInfo.Arguments = arguments; // 添加命令行参数 startInfo.UseShellExecute = false; // 不使用操作系统外壳程序启动进程 startInfo.RedirectStandardOutput = true; // 可选:重定向标准输出以便读取返回数据 using (Process process = Process.Start(startInfo)) { if (process != null && !startInfo.UseShellExecute) { string output = process.StandardOutput.ReadToEnd(); // 如果需要捕获输出则在此处处理 Console.WriteLine(output); } process.WaitForExit(); // 等待子进程结束再继续当前线程逻辑 [^2] } } catch (Exception ex) { Console.WriteLine($"发生错误: {ex.Message}"); } } } ``` 上述代码片段展示了如何创建一个新的 `ProcessStartInfo` 对象用于配置启动选项,其中包括设置欲执行文件名以及附加参数等内容;接着实例化一个 `Process` 来实际触发这个新进程,并通过调用 `WaitForExit()` 函数确保主线程会暂停直到被唤起的外部程序完成为止[^2]。 另外需要注意的是,在某些情况下可能还需要考虑工作目录(`WorkingDirectory`) 的设定,特别是当所指代的目标可执行文件位于特定位置而非全局可用时更为重要。 最后提醒一点关于安全性方面的问题——始终验证来自不可信源的数据后再将其嵌入到任何类型的 shell 命令当中去,从而防止潜在的安全隐患比如注入攻击等风险的发生。 --- ### 获取启动参数于自定义 Exe 应用内部 如果开发人员正在构建自己的控制台或者图形界面型 Windows Forms/WPF 应用,则同样能够接收到来自外界传来的这些启动参数。下面是一个简单的例子说明怎样取得它们: ```csharp static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main(string[] args) { foreach(var arg in args){ Console.WriteLine(arg); } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm(args)); // 将参数转发至窗体构造函数中进一步解析和使用 [^3]. } } ``` 此部分演示了如何从主函数签名中的数组变量 `args` 接收所有由父级过程所提供的启动参数,并逐一打印出来供调试查看之用。同时还可以把这些值传递给后续 UI 层面的对象初始化阶段加以运用。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值