重定向文件系统
本文关键字:文件系统 重定向 | 更新日期: 2023-09-27 18:35:25
好的,所以我确定以前有人问过这个问题,但我似乎无法正确表达问题以获得任何类型的答案。
我正在尝试做的是通过 c# 启动一个应用程序,然后让它对 SHGetFolderPath
或 Environment.GetFolder
(int .net) 的所有调用返回我指定的备用路径。
我已经尝试使用ProcessStartInfo.EnvironmentalVariables
将USERPROFILE
设置为某个任意目录的示例,但它不起作用。它将环境变量USERPROFILE
设置为正确的值,但调用 SHGetFolderPath
或 Environment.GetFolder
仍返回以前的值。
关于我如何一路到达那里的任何想法?
这是我为此编写的测试应用程序
class Program
{
static void Main(string[] args)
{
if (args.Any(x => x.Contains("x")))
{
// Read vars
Console.WriteLine("a=" + Environment.GetEnvironmentVariable("a"));// a=tacos
Console.WriteLine("USERPROFILE=" + Environment.GetEnvironmentVariable("USERPROFILE")); //USERPROFILE=F:'UP
Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)); // C:'Users'Username
Console.WriteLine();
var allvars = Environment.GetEnvironmentVariables();
foreach (var key in allvars.Keys)
{
Console.WriteLine("{0} - {1}", key, allvars[key]);
}
Console.WriteLine("Done Second Process");
}
else
{
// Start new process
var proc = new System.Diagnostics.ProcessStartInfo(Assembly.GetEntryAssembly().Location);
proc.Arguments = "x";
proc.EnvironmentVariables["a"] = "tacos";
proc.EnvironmentVariables["USERPROFILE"] = @"F:'UP";
proc.UseShellExecute = false;
proc.RedirectStandardInput = true;
proc.RedirectStandardOutput = true;
proc.RedirectStandardError = true;
var p = Process.Start(proc);
do
{
Thread.Sleep(10);
Console.Out.Write(p.StandardOutput.ReadToEnd());
}
while (!p.HasExited);
//catch any leftovers in redirected stdout
Console.Out.Write(p.StandardOutput.ReadToEnd());
Console.WriteLine("Any Key");
Console.ReadKey();
Console.WriteLine("Exiting...");
}
}
}
据
我所知,Windows并不是为chroot风格的行为而设计的。最接近的是文件系统虚拟化,但 a) 与SHGetFolderPath
无关,b) 在不考虑通用性的情况下实现。所以我不认为你要找的东西真的可能。