Java user.home устанавливается на %userprofile % и не быть разрешенным

Наша компания, недавно обновленная от Windows XP до Предприятия Windows 7. Установка JDK больше не устанавливает user.home на полный путь пользовательского каталога, но вместо этого устанавливает user.home на %userprofile%. Это вызывает много проблем с приложениями, такими как Eclipse, Знаток, и т.д. Я теперь должен установить-Duser.home в JVM для каждого приложения. Кто-либо еще испытал это? Есть ли фиксация для этого? Это было бы связано с установкой Предприятия Windows 7? Я попробовал 1,5 JDK и 1,6 JDK.

Вот список свойств. Отметьте user.home:

-- listing properties --
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=C:\Program Files\Java\jre6\bin
java.vm.version=16.0-b13
java.vm.vendor=Sun Microsystems Inc.
java.vendor.url=http://java.sun.com/
path.separator=;
java.vm.name=Java HotSpot(TM) Client VM
file.encoding.pkg=sun.io
user.country=US
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=
java.vm.specification.name=Java Virtual Machine Specification
user.dir=C:\Users\politesp\Desktop
java.runtime.version=1.6.0_18-b07
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=C:\Program Files\Java\jre6\lib\endorsed
os.arch=x86
java.io.tmpdir=C:\Users\politesp\AppData\Local\Temp\
line.separator=

java.vm.specification.vendor=Sun Microsystems Inc.
user.variant=
os.name=Windows 7
sun.jnu.encoding=Cp1252
java.library.path=C:\WINDOWS\system32;.;C:\WINDOWS\Sun\...
java.specification.name=Java Platform API Specification
java.class.version=50.0
sun.management.compiler=HotSpot Client Compiler
os.version=6.1
user.home=%userprofile%
user.timezone=
java.awt.printerjob=sun.awt.windows.WPrinterJob
file.encoding=Cp1252
java.specification.version=1.6
user.name=politesp
java.class.path=.
java.vm.specification.version=1.0
sun.arch.data.model=32
java.home=C:\Program Files\Java\jre6
java.specification.vendor=Sun Microsystems Inc.
user.language=en
awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=mixed mode, sharing
java.version=1.6.0_18
java.ext.dirs=C:\Program Files\Java\jre6\lib\ext;C:...
sun.boot.class.path=C:\Program Files\Java\jre6\lib\resour...
java.vendor=Sun Microsystems Inc.
file.separator=\
java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport...
sun.cpu.endian=little
sun.io.unicode.encoding=UnicodeLittle
sun.desktop=windows
sun.cpu.isalist=pentium_pro+mmx pentium_pro pentium+m...

Обновление:

Используя ссылку на ошибку от Andreas_D я обнаружил:

Значение HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Desktop %userprofile %\Desktop на моей установке Предприятия Windows 7.

Когда я изменяю значение этого ключа к C:\Users\politesp\Desktop, мой user.home решает правильно. Какая-либо идея, почему это происходит?

34
задан informatik01 1 November 2013 в 22:27
поделиться

2 ответа

Проблема заключается в том, что пользователь в Windows называется DefureAppPool. Однако он не появляется нигде в диалогах безопасности. Однако он является фактическим пользователем. Проблема заключалась в том, что этот пользователь должен быть частью группы PerformureMonureUsers, поскольку моя веб-служба использует PerformureCounters. Оказывается, вы должны сделать это из командной строки.

net localgroup «Performance Monitor Users» DefureAppPool/add

Время от времени это не работает и дает вам ошибку: «Нет такого пользователя или группы: DefureAppPool»

Чтобы добавить пользователя другим способом:

  1. Перейдите в меню «Пуск» в Windows 7.
  2. Введите «Edit Users» в поле поиска.
  3. Откройте раздел «Изменение локальных пользователей и групп».
  4. Перейдите в папку групп.
  5. Щелкните правой кнопкой мыши по группе «Performance Monitor Users» и перейдите к свойствам.
  6. Нажмите кнопку Add... кнопка.
  7. Введите «IIS APPPool\DefureAppPool» и нажмите кнопку «Проверить имена».
  8. Нажмите кнопку OK, и вы должны быть готовы к работе.
-121--1662175-

Чистый Javascript

С чистым Javascript, вы должны будете циклически через каждый вариант, и проверить значение его по отдельности.

// Get all options within <select id='foo'>...</select>
var op = document.getElementById("foo").getElementsByTagName("option");
for (var i = 0; i < op.length; i++) {
  // lowercase comparison for case-insensitivity
  (op[i].value.toLowerCase() == "stackoverflow") 
    ? op[i].disabled = true 
    : op[i].disabled = false ;
}

Без включения нецелевых элементов:

// Get all options within <select id='foo'>...</select>
var op = document.getElementById("foo").getElementsByTagName("option");
for (var i = 0; i < op.length; i++) {
  // lowercase comparison for case-insensitivity
  if (op[i].value.toLowerCase() == "stackoverflow") {
    op[i].disabled = true;
  }
}

jQuery

С помощью jQuery можно сделать это с помощью одной строки:

$("option[value='stackoverflow']")
  .attr("disabled", "disabled")
  .siblings().removeAttr("disabled");

Без включения нецелевых элементов:

$("option[value='stackoverflow']").attr("disabled", "disabled");

Обратите внимание, что регистр не является нечувствительным. «StackOverflow» не будет равен «stackoverflow». Чтобы получить совпадение без учета регистра, необходимо выполнить циклический перебор каждого из них, преобразовав значение в нижний регистр, а затем выполнить проверку:

$("option").each(function(){
  if ($(this).val().toLowerCase() == "stackoverflow") {
    $(this).attr("disabled", "disabled").siblings().removeAttr("disabled");
  }
});

Без включения нецелевых элементов:

$("option").each(function(){
  if ($(this).val().toLowerCase() == "stackoverflow") {
    $(this).attr("disabled", "disabled");
  }
});
-121--1176161-

Большая часть разделов реестра расположена по адресу:

HKEY _ CURRENT _ USER\Software\Microsoft\Windows Папки

начинались с % userprofile% . Я обновил все разделы реестра, которые начинались с % userprofile% , чтобы начать с C :\Users\myusername . Я проверил в Windows XP, что пути действительно жестко закодированы и что % userprofile% не используется. ИТ-специалисты упомянули, что разделы реестра по умолчанию используют % userprofile% из-за профиля по умолчанию, используемого в Windows 7. JVM ожидает, что путь рабочего стола будет жестко закодирован. Он не будет оценивать переменные среды.

Можно по одному обновить разделы реестра или экспортировать папку и изменить разделы. Вот как можно экспортировать и импортировать разделы реестра:

  1. Перейти к Пуск > Выполнить.
  2. Введите regedit . Откроется редактор реестра.
  3. Перейдите к HKEY _ CURRENT _ USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders .
  4. Щелкните правой кнопкой мыши Shell Folders и выберите Export.
  5. Выберите рабочий стол в качестве места назначения и введите Shell Folders в качестве имени файла и сохраните файл.
  6. Откройте файл в текстовом редакторе и замените % userprofile% на C :\\Users\\your username . Сохраните и закройте файл.
  7. Вернитесь в окно редактора реестра и выберите Файл > Импорт в главном меню.
  8. Выберите Shell Folders.reg и нажмите кнопку «Открыть».
  9. Закройте редактор реестра и удалите файл Shell Folders.reg с рабочего стола.
25
ответ дан 27 November 2019 в 16:45
поделиться

Это выглядит для меня, как будто - по любым причинам - % UserProfile% не был установлен на значение. Что вы получаете, если вы набрали Echo% UserProfile% в командной оболочке?

Может быть, это не функция ОС, а проблема конфигурации. На моей машине (Vista) % UserPROFILE% решает в мой домашний каталог, и одинаково для недвижимости Java user.home

Редактирование

Вот проблема Vista / Windows7 с пользовательской помощью user.home: ошибка . Может не решить вашу проблему может дать вам идею ..

11
ответ дан 27 November 2019 в 16:45
поделиться
Другие вопросы по тегам:

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