替换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