PDA

Показать полную графическую версию : [решено] Подружить реестр с внутренними ссылками 1С


Stavral
03-03-2015, 16:05
Пытаюсь научить 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%" (точно не знаю, надо ли ставить % - пробовал с ними и без них). В общем, при попытке зайти по ссылке выдается ошибка, что приложение не найдено.

Делал это все в первый раз, раньше опыта не было, потому полагаю, что где-то чего-то забыл прописать. Подскажите, пожалуйста, если кто знает!

Blast
03-03-2015, 16:24
точно не знаю, надо ли ставить % »Ставить. А еще попробуйте значение параметра писать так:@%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

Может чего не то насоветовал, не проверял еще :)

Stavral
04-03-2015, 09:11
Переменные там такие:
%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" - нет. Таким образом, придется все-таки обе переменные политиками распространять. Ну или политиками же определять сначала разрядность...

В любом случае, не работает, если в ключе реестра указываю переменную, а не полный путь :-( Непонятно как-то, почему реестре не воспринимает переменные.

Iska
04-03-2015, 09:41
Stavral, а с чего он вдруг должен «воспринимать»? «Воспринимают» или «не воспринимают» приложения. Специально для «не воспринимающих» был заведён тип параметра «REG_EXPAND_SZ». Если в Вашем случае сие допустимо — можете попробовать.

Stavral
04-03-2015, 10:19
Iska, разве нельзя в значение ключа реестра вставить переменную?

Blast
04-03-2015, 10:21
Stavral, используйте параметр типа REG_EXPAND_SZ »

Stavral
04-03-2015, 11:22
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 через "Выполнить" тоже работает - т.е. система восприняла новую переменную. Почему же когда переменную помещаю в реестр - все перестает работать?

Stavral
04-03-2015, 12:54
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". Все равно ошибка - "приложение не найдено".

Iska
04-03-2015, 12:58
со значением @%1cestart.exe% /URL »
1. У Вас есть такая переменная окружения — «%1cestart.exe%»?
2. Если есть — попробуйте обрамить кавычками путь — «"%1cestart.exe%"».

Blast
04-03-2015, 13:41
заменить C:\\Program Files (x86)\\1cv8\\common\\1cestart.exe\ на %1cestart.exe% »
Не так, переменную назначить к папке, а не к исполняемому файлу. То есть к C:\Program Files (x86)\1cv8\common\

Stavral
04-03-2015, 14:36
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" - тоже ошибка, но другая.

Blast
04-03-2015, 14:46
если в реестре поменять 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 (без кавычек)

Вы ведь переменную назначили к папке, а исполняемый файл не указали в параметре реестра, как его системе как найти?
Да и переменную обзовите как-то иначе чтоб не путаться.

Iska
04-03-2015, 14:49
- в переменных среды для 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, без символов процента. Просто имя исполняемого файла.

Stavral
04-03-2015, 15:54
Blast, не пойму, при чем тут имя переменной. Я не новую переменную создавал, а модифицировал переменную PATH, чтобы операционная система искала исполняемый 1cestart.exe в нужной папке. И ведь это работает! Потому что если утилитой "Выполнить" попробовать зайти по ссылке 1cestart.exe /URL e1c://server/srv-s4cm1.onegroup.ru/sed83#e1cib/data/Задача.ЗадачаИсполнителя?ref=b2ef00505692136c11e3dcd9d889a7f6 - она откроется.

Может быть я изначально все не так сделал? Подскажите, пожалуйста, как мне создать переменную, указывающую на конкретный *.exe?

Iska, так я уже пробовал, не работает :(

Iska
04-03-2015, 16:08
Потому что если утилитой "Выполнить" …»
Для «Выполнить» работает не только PATH, но и «App Paths»: Application Registration (Windows) (https://msdn.microsoft.com/en-us/library/windows/desktop/ee872121%28v=vs.85%29.aspx),

Iska, так я уже пробовал, не работает »
Что при этом сообщает?

Stavral
04-03-2015, 16:19
Что при этом сообщает? »

"Приложение не найдено"

Stavral
04-03-2015, 16:54
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)%??? Хоть убейте не понимаю, в чем тут ошибка...

Stavral
06-03-2015, 12:11
В общем, проблему решили обходным способом. Создали групповую политику, в которой есть условие по разрядности операционной системы.

Соответственно, на х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