.NET 不会使用命令行参数调用方法?

Posted

技术标签:

【中文标题】.NET 不会使用命令行参数调用方法?【英文标题】:.NET won't invoke method with command line args? 【发布时间】:2013-12-07 18:42:40 【问题描述】:

我正在尝试使用 REBOOT=ReallySuppress 命令行参数卸载 C# 中的程序,但 Windows 进程监视器(Rohitab 的 API 监视器)显示我所需的命令行参数实际上并未传递给 msiexec.exe。我的代码有缺陷吗?

public static List<ManagementObject> programs;       

public void Uninstall(int index)

    object[] args = "REBOOT=ReallySuppress", "REMOVE=ALL";
    programs[index].InvokeMethod("Uninstall", args);


...

程序列表在代码中的其他地方初始化并且工作正常。 API Monitor 显示 msiexec.exe 进程使用以下参数启动:

"C:\Windows\SysWOW64\\msiexec.exe" /i "C:\Users\Joel Denning\AppData\LocalLow\Sun\Java\jre1.7.0_45.msi" /qn METHOD=joff

没有我传入的REBOOT=ReallySuppressREMOVE=ALL 参数。

【问题讨论】:

你能解释一下为什么你的代码示例定义和初始化args吗?您说问题出在命令行参数上,但您的代码 sn-p 中没有使用它们... 【参考方案1】:

底层类型是 Win32_Product。 此类的方法卸载没有参数。 http://msdn.microsoft.com/en-us/library/aa393941(v=vs.85).aspx

所以你的代码在语法上看起来没问题。

见How to uninstall program without rebooting

【讨论】:

感谢您的解释,这让我很沮丧。在我的情况下,我能够通过杀死我正在卸载的应用程序的所有正在运行的进程来强制不重新启动。一旦我这样做了,就不需要将 args 传递给 msi 卸载程序,因为 MSI 仅在有正在运行的进程时才强制重新启动。

以上是关于.NET 不会使用命令行参数调用方法?的主要内容,如果未能解决你的问题,请参考以下文章

PowerShell 命令行参数和“--”

27.Go 解析命令行参数

curl命令行参数及使用

使用命令行参数在另一个 Python 脚本中调用一个 Python 脚本

寻找 .NET 的命令行参数解析器 [关闭]

Go语言-获取命令行参数