Обнаружение виртуализации реестра

Я думаю, что это лучший способ

$use_errors = libxml_use_internal_errors(true);
$xml = simplexml_load_file($url);
if (false === $xml) {
  // throw new Exception("Cannot load xml source.\n");
}
libxml_clear_errors();
libxml_use_internal_errors($use_errors);

подробнее: http://php.net/manual/en/function.libxml-use-internal-errors.php

21
задан 4 revs, 2 users 65%robert dumpke 23 May 2017 в 10:31
поделиться

3 ответа

You can enable / disable virtualization on a per key basis, according to this, but it tells you to use a command line tool. But there must be a way to do it programmatically.

It might be easiest just to turn off virtualization in your app completely by setting requestedExecutionLevel in your manifest. You can try highestAvailable, but that might mean your app always runs as Administrator. It seems to imply just setting it to asInvoker will turn off virtualization. See also.

2
ответ дан 29 November 2019 в 22:04
поделиться

Обратите внимание, что HKCR представляет собой виртуализированное хранилище, сочетание HKLM \ Software \ Classes и HKCU \ Software \ Classes .

Лучшим подходом было бы даже не допустить виртуализации реестра. Сначала убедитесь, что пользователь имеет повышенные права во время выполнения, а затем вы можете уведомить пользователя, что изменения будут применены только к текущему пользователю, прежде чем он даже начнет вносить изменения.

Определив, являетесь ли вы администратором с повышенными правами в первую очередь вы можете просто избежать записи в HKLM, когда он будет виртуализирован.

Пример:

private bool IsAdministrator
{
    get
    {
        WindowsIdentity wi = WindowsIdentity.GetCurrent();
        WindowsPrincipal wp = new WindowsPrincipal(wi);

        return wp.IsInRole(WindowsBuiltInRole.Administrator);
    }
}

Примечание: Я не пишу код на C #, пример взят из вопроса Как я могу определить, работает ли мой процесс с повышенным UAC? ​​

1
ответ дан 29 November 2019 в 22:04
поделиться

Это отлично поставленный вопрос, +1 (Почему это вики сообщества, он заслуживает очков!)

В общем, существует набор правил (который [как вы run into] будет меняться со временем), которые определяют, задействована ли виртуализация UAC [и, следовательно, неявно реестр].

Некоторые важные части документации наборов правил виртуализации реестра в MSDN :

  1. [как говорит Джеффамафон], если в манифесте задан параметр requiredPrivileges / requestedExecutionLevel, он отключается. Похоже, вы не исключили добавления манифеста, поэтому не могли бы вы указать, почему это не сработает для вас? (Вы говорите: «Я не смог сделать это в C # V2» - есть опция «Добавить элемент» для добавления файла манифеста приложения, которая доступна в VS2005)
  2. , если исполняемый файл работает в 64-разрядной версии, он выключен по умолчанию
  3. , если это не интерактивный процесс (например, служба, или размещенный в IIS и т. д.), он выключен

Если вы не можете повлиять на любой из вышеперечисленных, что является идеальным вариантом, и вы, таким образом, хотите определить, применяется ли виртуализация UAC в текущем контексте, используйте этот ответ на вопрос, который сначала может не показаться связанным . (Очевидно, вы

11
ответ дан 29 November 2019 в 22:04
поделиться
Другие вопросы по тегам:

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