替换C#应用程序的进程参数

替换C#应用程序的进程参数,c#,.net,arguments,C#,.net,Arguments,有没有一种方法可以像对本机程序所做的那样,替换托管进程的参数值 这是我写的一个程序,试图做同样的事情,但它不像另一个案例那样工作: static void Main(string[] args) { if (args == null) { return; } foreach (String arg in args)

有没有一种方法可以像对本机程序所做的那样,替换托管进程的参数值

这是我写的一个程序,试图做同样的事情,但它不像另一个案例那样工作:

        static void Main(string[] args)
        {
            if (args == null) 
            { 
                return; 
            }

            foreach (String arg in args)
            {
                Console.WriteLine("Before: " + arg); 

                unsafe
                {
                    fixed (char* ptr = arg)
                    {
                        for (int i = 0; i < arg.Length; i++)
                        {
                            *(ptr + i) = 'x';
                        }
                    }
                }

                Console.WriteLine("After: " + arg); 
            }

            Console.WriteLine("Environment.GetCommandLineArgs(): ");

            foreach (String arg in Environment.GetCommandLineArgs())
            {
                Console.WriteLine(arg);
            }
        }

提前感谢。

环境。GetCommandLineArgs()
可能会在Windows上使用本机。但是,返回值将被封送到.Net字符串中,并且对
GetCommandLine()
实际返回的本机指针没有影响


您应该假设这是只读的,并且不能保证写入指针不会导致错误。我相信您可以使用
GetCommandLine()
的P/Invoke定义和
IntPtr
来覆盖命令行,但这是未定义的行为,不能保证将来会起作用(雷蒙德在他的文章中经常指出这种假设)。

您想实现什么?找不到你?我真的,真的很犹豫。您正在对应该是不可变字符串的内容进行变异,并且您不知道是否一开始只向您传递了一个副本。也许如果我们知道为什么这样做是可取的?我想知道,当在命令行参数上传递敏感信息时,是否有一种方法可以隐藏这些信息,使其不被Process Explorer或任何其他可以查看进程命令行参数的工具所查看。@Duat:您可以生成一个分离的子进程,通过命名管道传入参数,并让父进程退出。@Duat:您可以使用文档中给出的方法将参数写入客户端(可能使用BinaryWriter)。如果你不能尝试这种方法,请告诉我。
Before: asdf
After: xxxx
Before: lkjasdf
After: xxxxxxx
Before: ;lkajsdf
After: xxxxxxxx
Environment.GetCommandLineArgs():
ConsoleApplication2.exe
asdf
lkjasdf
;lkajsdf