Показать полную графическую версию : [решено] Подружить реестр с внутренними ссылками 1С
Пытаюсь научить Windows 7 открывать т.н. внутренние ссылки 1С Предприятие (разновидность URI). Сама ссылка имеет такой вид: e1c://server/srv-cm2.test.ru/basa1c#e1cib/data/Справочник.ВнутренниеДокументы?ref=9bd4567542136c11e38813d6f7f28b
Чтобы винда узнавала ссылку, нужно внести изменения в реестре и связать приложение клиента 1С с именем ссылки. В ветке HKEY_CLASSES_ROOT создаю раздел e1c и подразделы shell/open/command - тут прописываю ключ для открытия этой ссылки клиентом 1С: "C:\Program Files (x86)\1cv8\common\1cestart.exe" - вроде открывает.
Проблема в том, что эту запись надо распространить политиками по компьютерам домена. Естественно, ОСи х32 и х64 у нас в соотношении 50/50. Т.е. в ключе реестра путь до 1cestart.exe варьируется в зависимости от разрядности системы - надо сделать переменные. ОК, иду в переменные среды, там добавляю параметр PATH и в нем указываю два пути до возможного расположения клиента 1С: %Programfiles%\1cv8\common;%Programfiles(x86)%\1cv8\common.
В реестре меняю прописанный в ключе путь на "%1cestart.exe%" (точно не знаю, надо ли ставить % - пробовал с ними и без них). В общем, при попытке зайти по ссылке выдается ошибка, что приложение не найдено.
Делал это все в первый раз, раньше опыта не было, потому полагаю, что где-то чего-то забыл прописать. Подскажите, пожалуйста, если кто знает!
точно не знаю, надо ли ставить % »Ставить. А еще попробуйте значение параметра писать так:@%1cestart.exe%
два пути до возможного расположения клиента 1С: %Programfiles%\1cv8\common;%Programfiles(x86)%\1cv8\common »
То есть в 64-разрядных системах к одной и той же папке - Program Files (x86) :)
Переменные там такие:
%ProgramFiles% = C:\Program Files (x86)
%ProgramFiles(x86)% = C:\Program Files (x86)
%ProgramW6432% = C:\Program Files
Можете свою переменную и не создавать, а писать переменную PF, примерно так:
@%ProgramFiles%\1cv8\common\1cestart.exe %1
или
@%ProgramW6432%\1cv8\common\1cestart.exe %1
Может чего не то насоветовал, не проверял еще :)
Переменные там такие:
%ProgramFiles% = C:\Program Files (x86)
%ProgramFiles(x86)% = C:\Program Files (x86)
%ProgramW6432% = C:\Program Files »
Да, я читал об этом на каком-то ресурсе. Только вот опытном это не подтверждается, как ни странно. На 64-битной системе переменная среды "%Programfiles%\1cv8\common" не дает возможность открыть 1cestart.exe из командной строки. А вот переменная "%Programfiles(x86)%\1cv8\common" - дает... В свою очередь на 32-битной системе работает именно "%Programfiles%\1cv8\common", а "%Programfiles(x86)%\1cv8\common" - нет. Таким образом, придется все-таки обе переменные политиками распространять. Ну или политиками же определять сначала разрядность...
В любом случае, не работает, если в ключе реестра указываю переменную, а не полный путь :-( Непонятно как-то, почему реестре не воспринимает переменные.
Stavral, а с чего он вдруг должен «воспринимать»? «Воспринимают» или «не воспринимают» приложения. Специально для «не воспринимающих» был заведён тип параметра «REG_EXPAND_SZ». Если в Вашем случае сие допустимо — можете попробовать.
Iska, разве нельзя в значение ключа реестра вставить переменную?
Stavral, используйте параметр типа REG_EXPAND_SZ »
Blast, у меня получилось в таком варианте:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\e1c]
"URL Protocol"=""
[HKEY_CLASSES_ROOT\e1c\shell]
[HKEY_CLASSES_ROOT\e1c\shell\open]
[HKEY_CLASSES_ROOT\e1c\shell\open\command]
@="\"C:\\Program Files (x86)\\1cv8\\common\\1cestart.exe\" /URL \"%1\""
Но хочется еще доработать, чтобы использовать переменные, о которых писал выше.
По логике, чтобы получить требуемое, надо лишь заменить C:\\Program Files (x86)\\1cv8\\common\\1cestart.exe\ на %1cestart.exe% - но это почему-то не работает. При этом в переменных среды все указано, запуск 1cestart.exe через "Выполнить" тоже работает - т.е. система восприняла новую переменную. Почему же когда переменную помещаю в реестр - все перестает работать?
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\e1c]
"URL Protocol"=""
[HKEY_CLASSES_ROOT\e1c\shell]
[HKEY_CLASSES_ROOT\e1c\shell\open]
[HKEY_CLASSES_ROOT\e1c\shell\open\command]
@=hex(2):40,00,25,00,31,00,63,00,65,00,73,00,74,00,61,00,72,00,74,00,25,00,20,\
00,2f,00,55,00,52,00,4c,00,20,00,22,00,25,00,31,00,22,00,00,00
Использовал REG_EXPAND_SZ со значением @%1cestart.exe% /URL "%1". Все равно ошибка - "приложение не найдено".
со значением @%1cestart.exe% /URL »
1. У Вас есть такая переменная окружения — «%1cestart.exe%»?
2. Если есть — попробуйте обрамить кавычками путь — «"%1cestart.exe%"».
заменить C:\\Program Files (x86)\\1cv8\\common\\1cestart.exe\ на %1cestart.exe% »
Не так, переменную назначить к папке, а не к исполняемому файлу. То есть к C:\Program Files (x86)\1cv8\common\
Iska, Blast, так, я похоже всех запутал слегка. :)
Дано (уже имеется):
- в переменных среды для Path добавлено следующее: C:\Program Files (x86)\1cv8\common;C:\Program Files\1cv8\common
- в реестре добавлено следующее:
[HKEY_CLASSES_ROOT\e1c]
"URL Protocol"=""
[HKEY_CLASSES_ROOT\e1c\shell]
[HKEY_CLASSES_ROOT\e1c\shell\open]
[HKEY_CLASSES_ROOT\e1c\shell\open\command]
@="\"C:\\Program Files (x86)\\1cv8\\common\\1cestart.exe\" /URL \"%1\""
В таком варианте все работает. Но если в реестре поменять C:\\Program Files (x86)\\1cv8\\common\\1cestart.exe\ на "%1cestart.exe%" - все прекращает работать. Если же в реестре использую REG_EXPAND_SZ со значением "%1cestart.exe%" /URL "%1" - тоже ошибка, но другая.
если в реестре поменять C:\\Program Files (x86)\\1cv8\\common\\1cestart.exe\ на "%1cestart.exe%" - все прекращает работать »
Так пробуйте менять на "%1cestart.exe%"\\1cestart.exe или "@%1cestart.exe%\1cestart.exe" /URL "%1" или скорее даже %1cestart.exe%\1cestart.exe /URL %1 (без кавычек)
Вы ведь переменную назначили к папке, а исполняемый файл не указали в параметре реестра, как его системе как найти?
Да и переменную обзовите как-то иначе чтоб не путаться.
- в переменных среды для Path добавлено следующее: C:\Program Files (x86)\1cv8\common;C:\Program Files\1cv8\common »
Stavral, попробуйте в этом случае добавить просто:
[HKEY_CLASSES_ROOT\e1c\shell\open\command]
@="\"1cestart.exe\" /URL \"%1\""
т.е., безо всяких REG_EXPAND_SZ, без символов процента. Просто имя исполняемого файла.
Blast, не пойму, при чем тут имя переменной. Я не новую переменную создавал, а модифицировал переменную PATH, чтобы операционная система искала исполняемый 1cestart.exe в нужной папке. И ведь это работает! Потому что если утилитой "Выполнить" попробовать зайти по ссылке 1cestart.exe /URL e1c://server/srv-s4cm1.onegroup.ru/sed83#e1cib/data/Задача.ЗадачаИсполнителя?ref=b2ef00505692136c11e3dcd9d889a7f6 - она откроется.
Может быть я изначально все не так сделал? Подскажите, пожалуйста, как мне создать переменную, указывающую на конкретный *.exe?
Iska, так я уже пробовал, не работает :(
Потому что если утилитой "Выполнить" …»
Для «Выполнить» работает не только PATH, но и «App Paths»: Application Registration (Windows) (https://msdn.microsoft.com/en-us/library/windows/desktop/ee872121%28v=vs.85%29.aspx),
Iska, так я уже пробовал, не работает »
Что при этом сообщает?
Что при этом сообщает? »
"Приложение не найдено"
Iska, решил попробовать с другой стороны. Зарегистрировал приложение 1cestart.exe тут HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\1cestart.exe.
Выглядит это так:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\1cestart.exe]
@="C:\Program Files (x86)\1cv8\common\1cestart.exe"
"Path"="C:\Program Files (x86)\1cv8\common"
В таком виде все работает.
Пожалуйста, объясните, почему все перестает работать, если заменить C:\Program Files (x86) на %ProgramFiles(x86)%??? Хоть убейте не понимаю, в чем тут ошибка...
В общем, проблему решили обходным способом. Создали групповую политику, в которой есть условие по разрядности операционной системы.
Соответственно, на х86 запись в реестр выглядит так:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\1cestart.exe]
@="C:\Program Files (x86)\1cv8\common\1cestart.exe"
"Path"="C:\Program Files (x86)\1cv8\common"
На х64 так:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\1cestart.exe]
@="C:\Program Files\1cv8\common\1cestart.exe"
"Path"="C:\Program Files\1cv8\common"
Переменные среды так и не заработали как от них ожидалось. Тему можно закрывать.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC