重定向文件系统

本文关键字:文件系统 重定向 | 更新日期: 2023-09-27 18:35:25

好的,所以我确定以前有人问过这个问题,但我似乎无法正确表达问题以获得任何类型的答案。

我正在尝试做的是通过 c# 启动一个应用程序,然后让它对 SHGetFolderPathEnvironment.GetFolder (int .net) 的所有调用返回我指定的备用路径。

我已经尝试使用ProcessStartInfo.EnvironmentalVariablesUSERPROFILE设置为某个任意目录的示例,但它不起作用。它将环境变量USERPROFILE设置为正确的值,但调用 SHGetFolderPathEnvironment.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) 在不考虑通用性的情况下实现。所以我不认为你要找的东西真的可能。