Расширенный установщик MSI - только запись в ProgramData при запуске приложения WPF в качестве администратора [дубликат]

ES6 предоставляет метод Array.from() , который создает новый экземпляр Array из объекта, подобного массиву или итерации.

let boxes = document.getElementsByClassName('box');

Array.from(boxes).forEach(v => v.style.background = 'green');
console.log(Array.from(boxes));
.box {
  width: 50px;
  height: 50px;
  margin: 5px;
  background: blue;
  display: inline-block;
}

Как вы можете видеть внутри фрагмента кода, после использования функции Array.from() вы можете манипулировать каждым элементом.

Это же решение с использованием jQuery.

$('.box').css({'background':'green'});
.box {
  width: 50px;
  height: 50px;
  margin: 5px;
  background: blue;
  display: inline-block;
}

2
задан user844541 4 April 2012 в 07:56
поделиться

2 ответа

Действительно ли вы на самом деле должны записываться в папку данных Program для каждой системы вместо папок (ов) данных для каждого пользователя?

Возможно, вы захотите взять посмотрите Environment.GetFolderPath и следующие Environment.SpecialFolder s:

  • Environment.SpecialFolder.ApplicationData - папка данных для данных приложения, синхронизированная с доменом контроллер, если профиль пользователя находится в роуминге
  • Environment.SpecialFolder.LocalApplicationData - папка данных для данных приложения, локальная и не синхронизированная (полезно для, например, кешей)

EDIT:

Протестировано в Windows 7 x64, пользователь без администратора.

var appData = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
var myFolder = Path.Combine(appData, "MyApp");
if(!Directory.Exists(myFolder)) Directory.CreateDirectory(myFolder);
File.WriteAllText(Path.Combine(myFolder, "Test.txt"), "Test.");

Это делает то, что ожидается, т.е. записывается в C:\ProgramData\MyApp\Test.txt. Насколько я могу судить («Командная строка режима администратора»), нет никакой виртуализации UAC.

Двойное редактирование:

Я предполагаю, что произошло то, что в какой-то момент пользователь Administrator записал файлы в вашу папку ProgramData, и, как таковая, виртуализация файловой системы UAC запускается и перенаправляется не-администратор записывает в VirtualStore.

Выполняется ли ваш деинсталлятор как администратор? Если это так, вам может потребоваться проверить путь VirtualStore для пользователя, который инициирует удаление, и фактический путь к файловой системе для удаления данных программы. Я не уверен, есть ли официальный способ сделать это, хотя ...

4
ответ дан AKX 22 August 2018 в 18:07
поделиться
  • 1
    Да. Я должен ... он должен делиться между всеми пользователями. И я использую Environment.SpecialFolder.ApplicationData, чтобы получить правильный путь – user844541 3 April 2012 в 16:55
  • 2
    @ user844541 - проверьте мое редактирование. Интересно, имеет ли это какое-то отношение к этому. – AKX 3 April 2012 в 17:07
  • 3
    в первую очередь - спасибо! По правде говоря, у меня есть более одного файла по данным программы, но это единственный файл, который перенаправляется. Что касается вашей догадки - это звучит разумно, вы указали на то, что это произойдет. Я сделаю еще несколько исследований. Большое спасибо / – user844541 3 April 2012 в 19:30

Я нашел причину ошибки.

приложение пытается взять на себя ответственность за файл, а затем создается другой файл.

Я удалил эту строку и теперь все отлично работает.

3
ответ дан user844541 22 August 2018 в 18:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: