gpt4 book ai didi

windows - 帮助 Windows Visa/7 UAC 文件系统虚拟化

转载 作者:可可西里 更新时间:2023-11-01 11:38:11 24 4
gpt4 key购买 nike

我正在开发一个旨在与旧 C++ 应用程序结合运行的程序。一款名为奇迹时代的游戏。在 Windows Vista 或 Windows 7(启用 UAC)下运行时,游戏保存文件将写入虚拟路径而不是真实路径。

例如;

原文:C:\Program Files (x86)\奇迹时代\保存

虚拟化:C:\Users\用户名\AppData\Local\VirtualStore\Program Files (x86)\Age of Wonders\Save

在我的 .Net 应用程序中,我从电子邮件服务器下载文件并将它们放在“保存”文件夹中,如果我尝试写入原始路径,我会在启用 UAC 时收到未经授权的访问异常。 Windows 不会为我自动将其转换为虚拟化路径。我一直在通过让我的用户以管理员身份运行应用程序来解决这个问题。但是我想做一个更优雅的解决方案。

我可以编写一些代码来处理异常并在我的代码中写入虚拟化路径,但我认为更好的解决方案是以某种方式将我的程序切换到一种模式,以便由 Windows 本身而不是在我的程序中完成代码。我认为这对于 future 的 Windows 版本来说是一个更好的长期解决方案。

我花了很多时间在互联网上搜索,我发现其他人也在谈论这个,但没有人提供任何实际可用的帮助。这是我看过的链接;

Should I use a VirtualStore solution on Vista?

Create Process with FS Virtualization Enabled

http://us.generation-nt.com/answer/using-settokeninformation-control-file-system-virtualization-vista-help-37057472.html

我需要的解决方案不涉及用户必须修改他们的系统设置或创建任何帐户来运行该过程等。

所以,下面我有一个简单的 Windows 窗体应用程序的代码。它有一个按钮和一个复选框,复选框用于切换虚拟化模式,按钮将一个小文本文件写入 Program Files 文件夹。我希望能够使用它来测试虚拟化行为。所以我希望在选中复选框等时将 File.txt 写入虚拟化路径。

如果有人能帮我填空函数,我将不胜感激。提前致谢。

using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
try
{
string testText = "Dave was here";
File.WriteAllText("C:\\Program Files\\DaveTest\\File.txt", testText);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
SetVirtualization(checkBox1.Checked);
}

private void SetVirtualization(bool enabled)
{
//What code do I need here, please provide examples than can be used
}
}

最佳答案

如果你想要虚拟化,你需要一个没有 list 的 32 位进程。您似乎已经有一个 32 位进程,因此您需要删除 list 。

我预计这对您漂亮 Shiny 的 WinForms 应用程序会造成不便,因为您将放弃现代主题外观。一个简单的解决方法是在单独的进程中对此进行编码,以仅处理需要虚拟化的应用程序部分。这样做的额外好处是您的流程的其余部分不必虚拟化。

关于windows - 帮助 Windows Visa/7 UAC 文件系统虚拟化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6018484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com