Я думаю, что это лучший способ
$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
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.
Обратите внимание, что 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 (Почему это вики сообщества, он заслуживает очков!)
В общем, существует набор правил (который [как вы run into] будет меняться со временем), которые определяют, задействована ли виртуализация UAC [и, следовательно, неявно реестр].
Некоторые важные части документации наборов правил виртуализации реестра в MSDN :
Если вы не можете повлиять на любой из вышеперечисленных, что является идеальным вариантом, и вы, таким образом, хотите определить, применяется ли виртуализация UAC в текущем контексте, используйте этот ответ на вопрос, который сначала может не показаться связанным . (Очевидно, вы