Я работаю над программой, которая предназначена для работы в сочетании со старым приложением C ++. Игра под названием Age of Wonders. При работе в Windows Vista или Windows 7 (с включенным UAC) файлы сохранения игры записываются в путь виртуализации, а не в реальный путь.
Так, например;
Оригинал:
C: \ Program Files (x86) \ Age of Wonders \ Save
Виртуализованная:
C: \ Users \ Имя пользователя \ AppData \ Local \ VirtualStore \ Program Files (x86) \ Age of Wonders \ Save
В моем приложении .Net я загружаю файлы с сервера электронной почты и помещаю их в папку «Сохранить», если при попытке записи по первоначальному пути я получаю исключение неавторизованного доступа, когда включен контроль учетных записей. Windows не конвертирует его автоматически в виртуализованный путь для меня. Я работал над этим, заставляя своих пользователей запускать приложение от имени администратора. Однако я хотел бы сделать более элегантное решение.
Я мог бы написать некоторый код для обработки исключения и записать в виртуализированный путь в моем коде, но я думаю, что лучшим решением было бы как-то переключить мою программу в режим, чтобы это делалось самой Windows, а не моим код. Я считаю, что это будет лучшим долгосрочным решением для будущих версий Windows.
Я потратил время на поиск в интернете и нашел других людей, которые говорят об этом, но никто не оказывает никакой помощи, которая на самом деле полезна. Вот ссылки, которые я посмотрел;
Должен ли я использовать решение VirtualStore в Vista?
Создание процесса с включенной виртуализацией ФС
http://us.generation -nt.com / ответ / с использованием-settokeninformation-контроль-файлов системы виртуализации перспектива-помощь-37057472.html
Мне нужно решение, чтобы не привлекать пользователя к изменению системных настроек или созданию каких-либо учетных записей для запуска процесса и т. Д.
Итак, ниже у меня есть код для простого приложения Windows Forms. Он имеет одну кнопку и один флажок, флажок предназначен для переключения режима виртуализации, а кнопка записывает небольшой текстовый файл в папку 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
}
}