【问题标题】:A question about the ProcessStartInfo class and the Argument Property?关于 ProcessStartInfo 类和 Argument 属性的问题?
【发布时间】:2011-03-26 18:58:30
【问题描述】:

一些示例代码:

var psi = new ProcessStartInfo();
psi.FileName = "path to update.exe";
psi.Arguments = "arguments for update.exe";
psi.Verb = "runas";

var process = new Process();
process.StartInfo = psi;
process.Start();   
process.WaitForExit();

参考:0xA3.

如果可能,您可以在代码中以编程方式将什么类型的对象传递给“.Arguments”属性?通常,您可以传递 int 或 string 类型。我想知道您是否可以传入更复杂的类型,例如 DirectoryInfo[] 或 FileInfo[]?有人知道这是否可能吗?如果没有,我将不得不想出别的办法?

为什么?我正在尝试从一个非常大的后台工作人员中删除一些问题代码,唯一的解决方案是将我需要的数据传递到一个进程中,该进程将处理我需要在一个完全不同的进程中完成的工作。问题这个问题代码总是抛出权限 - 应用程序没有权限。

【问题讨论】:

  • 为什么需要一个单独的进程?
  • 我将需要提升权限的问题代码发送到另一个单独的 .exe 文件中。

标签: c# winforms .net-3.5 process backgroundworker


【解决方案1】:

- 将对象分配到全局内存中,然后将生成的 IntPtr 在 Arguments 中传递给另一个进程。

【讨论】:

  • 选项 2 正是我想到的替代解决方案。 +1!可以进一步详细说明选项 1 或 3 ???
  • @IbrarMumtaz:我更新了答案,引用了将字符串传输到另一个进程的示例代码,并删除了第三个选项,因为它太难了。
【解决方案2】:

不,这是不可能的。

您应该考虑在现有流程中创建一个新的 AppDomain。

【讨论】:

  • 我想的也差不多。值得一试:)
【解决方案3】:

按照定义,Arguments 属性的类型为 string,因此您只能将空格分隔的参数传递给进程,就像在命令行调用它时一样。

【讨论】:

    【解决方案4】:

    如果您从命令提示符运行 .exe,则参数正是您键入的内容(带有前导和尾随引号)。

    使用字符串。

    【讨论】:

    • 我想出了我的解决方案。我的问题过于复杂并且很懒惰..我可以进一步退回代码并使用字符串。我会尽快发布我的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多