Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
//

Описание.Имя("v8find")
.Версия("0.3.1")
.Версия("0.3.2")
.Автор("Khorev Aleksey")
.АдресАвтора("Khorevaa@gmail.com")
.Описание("Библиотека поиска исполняемых файлов платформы 1С Предприятие")
Expand Down
73 changes: 47 additions & 26 deletions src/Классы/Платформа1С.os
Original file line number Diff line number Diff line change
Expand Up @@ -356,13 +356,18 @@
Лог.Отладка("Поиск платформы в <%1> каталогах", МассивКаталоговПоиска.Количество());

Для каждого ОписаниеКаталогаПоиска Из МассивКаталоговПоиска Цикл

ВыполнитьПоискВКаталоге(ОписаниеКаталогаПоиска);

ОписаниеКаталогаПоиска.ПоискВыполнен = Истина;

КонецЦикла;


Если ТаблицаВерсийПлатформы.Количество() = 0 Тогда
Лог.Предупреждение("Не найдено ни одной установленной версии платформы 1С (каталогов поиска: %1)",
МассивКаталоговПоиска.Количество());
КонецЕсли;

КонецПроцедуры

Процедура ВыполнитьПоискВКаталоге(Знач ОписаниеКаталогаПоиска);
Expand Down Expand Up @@ -455,8 +460,13 @@
МассивПутейКонфигурационногоФайла = СобратьВозможныеКаталогиУстановкиПлатформыWindows();

Если Это64ОС Тогда

КаталогПрограммWindows_x64 = ПолучитьПеременнуюСреды("ProgramW6432");
Если Не ЗначениеЗаполнено(КаталогПрограммWindows_x64) Тогда
// Дочерние процессы могут получать урезанное окружение без ProgramW6432,
// при этом ProgramFiles в нем обычно присутствует
КаталогПрограммWindows_x64 = ПолучитьПеременнуюСреды("ProgramFiles");
КонецЕсли;
КаталогПрограммWindows_x86 = ПолучитьПеременнуюСреды("ProgramFiles(x86)");
ПутьУстановки_x64_1Cv8 = ОбъединитьПути(КаталогПрограммWindows_x64, "1Cv8");
ПутьУстановки_x64_1Cv82 = ОбъединитьПути(КаталогПрограммWindows_x64, "1Cv82");
Expand All @@ -465,11 +475,15 @@
ПутьУстановки_x86_1Cv8t = ОбъединитьПути(КаталогПрограммWindows_x86, "1Cv8t");
ПутьУстановки_x86_1Cv82 = ОбъединитьПути(КаталогПрограммWindows_x86, "1Cv82");

ДобавитьКаталоГПоиска(ПутьУстановки_x64_1Cv8, РазрядностьПлатформы.x64, Неопределено);
ДобавитьКаталоГПоиска(ПутьУстановки_x64_1Cv82, РазрядностьПлатформы.x64, Неопределено);
ДобавитьКаталоГПоиска(ПутьУстановки_x86_1Cv8, РазрядностьПлатформы.x86, Неопределено);
ДобавитьКаталоГПоиска(ПутьУстановки_x86_1Cv8t, РазрядностьПлатформы.x86, Неопределено);
ДобавитьКаталоГПоиска(ПутьУстановки_x86_1Cv82, РазрядностьПлатформы.x86, Неопределено);
Если ЗначениеЗаполнено(КаталогПрограммWindows_x64) Тогда
ДобавитьКаталоГПоиска(ПутьУстановки_x64_1Cv8, РазрядностьПлатформы.x64, Неопределено);
ДобавитьКаталоГПоиска(ПутьУстановки_x64_1Cv82, РазрядностьПлатформы.x64, Неопределено);
КонецЕсли;
Если ЗначениеЗаполнено(КаталогПрограммWindows_x86) Тогда
ДобавитьКаталоГПоиска(ПутьУстановки_x86_1Cv8, РазрядностьПлатформы.x86, Неопределено);
ДобавитьКаталоГПоиска(ПутьУстановки_x86_1Cv8t, РазрядностьПлатформы.x86, Неопределено);
ДобавитьКаталоГПоиска(ПутьУстановки_x86_1Cv82, РазрядностьПлатформы.x86, Неопределено);
КонецЕсли;

Для каждого ПутьУстановки Из МассивПутейКонфигурационногоФайла Цикл

Expand Down Expand Up @@ -497,12 +511,14 @@
Иначе

КаталогПрограммWindows = ПолучитьПеременнуюСреды("ProgramFiles");

ПутьУстановки_x86_1Cv8 = ОбъединитьПути(КаталогПрограммWindows, "1Cv8");
ПутьУстановки_x86_1Cv82 = ОбъединитьПути(КаталогПрограммWindows, "1Cv82");

ДобавитьКаталоГПоиска(ПутьУстановки_x86_1Cv8, РазрядностьПлатформы.x86, Неопределено);
ДобавитьКаталоГПоиска(ПутьУстановки_x86_1Cv82, РазрядностьПлатформы.x86, Неопределено);
Если ЗначениеЗаполнено(КаталогПрограммWindows) Тогда
ДобавитьКаталоГПоиска(ПутьУстановки_x86_1Cv8, РазрядностьПлатформы.x86, Неопределено);
ДобавитьКаталоГПоиска(ПутьУстановки_x86_1Cv82, РазрядностьПлатформы.x86, Неопределено);
КонецЕсли;

Для каждого ПутьУстановки Из МассивПутейКонфигурационногоФайла Цикл

Expand Down Expand Up @@ -554,31 +570,36 @@
// Ищем в расположениях для Vista и выше.
// Желающие поддержать пути в Windows XP - welcome
КаталогВсеПользователи = ПолучитьПеременнуюСреды("ALLUSERSPROFILE");
Если Не ЗначениеЗаполнено(КаталогВсеПользователи) Тогда
КаталогВсеПользователи = ПолучитьПеременнуюСреды("ProgramData");
КонецЕсли;
КаталогТекущегоПользователя = ПолучитьПеременнуюСреды("APPDATA");

МассивПутей = Новый Массив;

СуффиксРасположения = "1C\1CEStart\1CEStart.cfg";

ОбщийКонфиг = ОбъединитьПути(КаталогВсеПользователи, СуффиксРасположения);
ДополнитьМассивРасположенийИзКонфигурационногоФайла(ОбщийКонфиг, МассивПутей);
ПользовательскийКонфиг = ОбъединитьПути(КаталогТекущегоПользователя, СуффиксРасположения);
ДополнитьМассивРасположенийИзКонфигурационногоФайла(ПользовательскийКонфиг, МассивПутей);

ДополнитьМассивРасположенийИзКонфигурационногоФайла(КаталогВсеПользователи, СуффиксРасположения, МассивПутей);
ДополнитьМассивРасположенийИзКонфигурационногоФайла(КаталогТекущегоПользователя, СуффиксРасположения, МассивПутей);

Лог.Отладка("Выполняем поиск расположения конфигурационного файла для учебной версии платформы.");
СуффиксРасположения = "1C\1CEStartt\1CEStart.cfg";

ОбщийКонфиг = ОбъединитьПути(КаталогВсеПользователи, СуффиксРасположения);
ДополнитьМассивРасположенийИзКонфигурационногоФайла(ОбщийКонфиг, МассивПутей);
ПользовательскийКонфиг = ОбъединитьПути(КаталогТекущегоПользователя, СуффиксРасположения);
ДополнитьМассивРасположенийИзКонфигурационногоФайла(ПользовательскийКонфиг, МассивПутей);

ДополнитьМассивРасположенийИзКонфигурационногоФайла(КаталогВсеПользователи, СуффиксРасположения, МассивПутей);
ДополнитьМассивРасположенийИзКонфигурационногоФайла(КаталогТекущегоПользователя, СуффиксРасположения, МассивПутей);

Возврат МассивПутей;

КонецФункции

Процедура ДополнитьМассивРасположенийИзКонфигурационногоФайла(Знач ИмяФайла, Знач МассивПутей)

Процедура ДополнитьМассивРасположенийИзКонфигурационногоФайла(Знач БазовыйКаталог, Знач СуффиксРасположения, Знач МассивПутей)

Если Не ЗначениеЗаполнено(БазовыйКаталог) Тогда
Возврат;
КонецЕсли;

ИмяФайла = ОбъединитьПути(БазовыйКаталог, СуффиксРасположения);

ФайлКонфига = Новый Файл(ИмяФайла);
Если Не ФайлКонфига.Существует() Тогда
Лог.Отладка("Конфигурационный файл " + ИмяФайла + " не найден.");
Expand Down
Empty file.
Empty file.
Empty file.
52 changes: 52 additions & 0 deletions tests/Платформа1С_test.os
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
ИменаТестов.Добавить("ТестДолжен_НайтиВерсию_8_5_x_Windows");
ИменаТестов.Добавить("ТестДолжен_НайтиВерсию_8_5_x_OSX");
ИменаТестов.Добавить("ТестДолжен_НайтиНесколькоВерсий_Windows");
ИменаТестов.Добавить("ТестДолжен_НайтиПлатформуВУрезанномОкружении_Windows");

Возврат ИменаТестов;

Expand Down Expand Up @@ -183,6 +184,57 @@

КонецПроцедуры

// Урезанное окружение: ProgramW6432, ProgramFiles(x86), ALLUSERSPROFILE и ProgramData не заданы.
// Стандартные пути установки должны собраться от ProgramFiles, а не превратиться в относительные.
Процедура ТестДолжен_НайтиПлатформуВУрезанномОкружении_Windows() Экспорт

Если Не ЭтоWindows Тогда
Сообщить("Тест выполняется только на windows");
юТест.ТестПройден();
Возврат;
КонецЕсли;

КаталогFixtures = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures");
КаталогПрограмм = ОбъединитьПути(КаталогFixtures, "windows-programfiles");

ИменаПеременных = СтрРазделить("ProgramW6432|ProgramFiles(x86)|ProgramFiles|ALLUSERSPROFILE|ProgramData", "|");
ИсходныеЗначения = Новый Соответствие;
Для каждого ИмяПеременной Из ИменаПеременных Цикл
ИсходныеЗначения.Вставить(ИмяПеременной, ПолучитьПеременнуюСреды(ИмяПеременной));
КонецЦикла;

Попытка

УстановитьПеременнуюСреды("ProgramW6432", "");
УстановитьПеременнуюСреды("ProgramFiles(x86)", "");
УстановитьПеременнуюСреды("ALLUSERSPROFILE", "");
УстановитьПеременнуюСреды("ProgramData", "");
УстановитьПеременнуюСреды("ProgramFiles", КаталогПрограмм);

Платформа1С = Новый Платформа1С;
ПутьКПредприятию = Платформа1С.ПутьКПредприятию("8.3.99.1111");

Исключение
ВосстановитьПеременныеСреды(ИсходныеЗначения);
ВызватьИсключение;
КонецПопытки;

ВосстановитьПеременныеСреды(ИсходныеЗначения);

ЭталонныйПуть = ОбъединитьПути(КаталогПрограмм, "1Cv8", "8.3.99.1111", ОбъединитьПути("bin", "1cv8.exe"));
Ожидаем.Что(НРег(ПутьКПредприятию), "платформа найдена через фолбэк на ProgramFiles").Равно(НРег(ЭталонныйПуть));

КонецПроцедуры

Процедура ВосстановитьПеременныеСреды(Знач ИсходныеЗначения)

Для каждого КлючИЗначение Из ИсходныеЗначения Цикл
Значение = ?(КлючИЗначение.Значение = Неопределено, "", КлючИЗначение.Значение);
УстановитьПеременнуюСреды(КлючИЗначение.Ключ, Значение);
КонецЦикла;

КонецПроцедуры

Лог = Логирование.ПолучитьЛог("oscript.lib.v8find");
Лог.УстановитьУровень(УровниЛога.Отладка);

Expand Down
Loading