假设我在运行窗口中键入了excel.exe /r "c:\book1.xlsx"
。
我将如何trap the switch(/r) and the parameter "c:\book1.xlsx" from my C# code
?
由于
答案 0 :(得分:4)
如果您的代码在进程中运行(在excel.exe中)
您可以通过Environment.CommandLine
属性获取命令行。请注意,进程可以更改它自己的命令行(毕竟它只是内存中的一些字节),但这种做法并不常见。
如果您的代码在进程外运行(选项1,推荐)
您可以使用WMI获取另一个进程的命令行参数。见here。您需要添加对System.Management.dll的引用。例如:
string query = string.Format("SELECT CommandLine FROM Win32_Process WHERE Name='{0}'", "excel.exe");
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
{
foreach (ManagementObject process in searcher.Get())
{
Console.WriteLine(process["CommandLine"]);
}
}
这将打印excel.exe的所有正在运行的实例的命令行。您还可以使用ProcessId
参数代替查询中的Name
参数按进程ID进行查询。
如果您的代码在进程外运行(选项2,更棘手)
您还可以使用NtQueryInformationProcess
和ReadProcessMemory
读取进程环境块(PEB)以获取包含该命令的_RTL_USER_PROCESS_PARAMETERS
,从而获得远程进程的命令行-线。但是,这些内容都没有记录,这意味着它不受支持且可能会发生变化。这样做的详细信息概述为here。
答案 1 :(得分:0)
没有选项的命令行参数
示例:yourExecutable.exe parameter1 parameter2 parameter3
参考:http://msdn.microsoft.com/en-us/library/aa288457%28VS.71%29.aspx
带选项的命令行参数 - 没有可用的标准解析器。您需要自己编写或借用
示例:yourExecutable.exe -f fileName --create