Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
91 commits
Select commit Hold shift + click to select a range
67f817a
New iss file
Bayselonarrend May 27, 2026
6028a89
Правка путей
Bayselonarrend May 27, 2026
09e061b
Bump actions/checkout from 6 to 7
dependabot[bot] Jun 18, 2026
54b5f1c
Merge pull request #1701 from EvilBeaver/dependabot/github_actions/ac…
nixel2007 Jun 19, 2026
d561ba8
Bump actions/cache from 5 to 6
dependabot[bot] Jun 23, 2026
8336649
Merge pull request #1703 from EvilBeaver/dependabot/github_actions/ac…
nixel2007 Jun 23, 2026
da01dd3
Исправление сборки под C# 14
EvilBeaver Jun 27, 2026
0986864
fixed #1696 Разрешалось чередование режимов компиляции в одном модуле
EvilBeaver Jun 27, 2026
d86e60f
Бамп версии для разработки
EvilBeaver Jun 27, 2026
3504724
Немного ясности в пробросе процесса в компонент.
dmpas Jun 27, 2026
0cd65f0
Merge pull request #1704 from dmpas/feature/addin-bslprocess-issue
EvilBeaver Jun 28, 2026
48f75cd
fix #1705: проверка приемника данных; возврат строки из Закрыть
Mr-Rm Jun 29, 2026
2e6af73
fix: пропущенная проверка
Mr-Rm Jun 29, 2026
7c565c2
Merge pull request #1706 from Mr-Rm/v2/fix-1705
EvilBeaver Jul 7, 2026
a4bfb48
fix #1707: совместимость и обработка ошибок в ЗаписатьТипДокумента
Mr-Rm Jul 7, 2026
6e7b032
недостающие проверки индекса +тесты
Mr-Rm Jul 14, 2026
01db884
вынесены исключения
Mr-Rm Jul 14, 2026
1c19450
Merge pull request #1709 from Mr-Rm/v2/fix-1707
EvilBeaver Jul 15, 2026
c150b55
добавлено свойство ТипЗначения
Mr-Rm Jul 14, 2026
02c147d
добавлено свойство ДоступныеЗначения
Mr-Rm Jul 15, 2026
63c558b
исправлен поиск допустимых значений + тесты
Mr-Rm Jul 15, 2026
b5275e7
преобразование в строку с учетом пустых элементов; тесты
Mr-Rm Jul 16, 2026
6bd24f1
забытый NULL
Mr-Rm Jul 16, 2026
a98bb3f
сортировка по значению с учетом типов +тесты
Mr-Rm Jul 16, 2026
6e8c9d8
добавлен метод ПолучитьИдентификатор +тест; описания для ЭлементСписк…
Mr-Rm Jul 16, 2026
3e9c00e
мелкий рефакторинг
Mr-Rm Jul 16, 2026
5236e94
Добавить глобальную функцию ЗаписатьДатуJSON
Stivo182 Jul 16, 2026
3bf3245
Bump actions/setup-dotnet from 5 to 6
dependabot[bot] Jul 16, 2026
863766c
Merge pull request #1712 from EvilBeaver/dependabot/github_actions/ac…
nixel2007 Jul 18, 2026
493f13c
к #1532: ОткрытьПоток для ЗаписьJSON
Mr-Rm Jul 20, 2026
5f656f7
по замечаниям: Flush перед закрытием, закрытие отделено от установки
Mr-Rm Jul 20, 2026
b10fbda
не закрывать поток +тест
Mr-Rm Jul 21, 2026
0c16452
добавлены и изменены тесты
Mr-Rm Jul 21, 2026
f4a1a41
изменено экранирование симолов +тесты
Mr-Rm Jul 21, 2026
a029e30
свойство Параметры; ПараметрыЗаписиJSON по умолчанию +тесты
Mr-Rm Jul 22, 2026
28013d0
переделано ЭкранированиеСимволов; исправлены описания и тесты
Mr-Rm Jul 23, 2026
3f9c180
Merge pull request #1714 from Mr-Rm/v2/fix-1532-jsonwriter
EvilBeaver Jul 30, 2026
073dda8
Bump actions/setup-java from 5 to 5.6.0
dependabot[bot] Jul 31, 2026
d1b4984
ЗагрузитьЗначения с учетом приведения +тест
Mr-Rm Aug 6, 2026
3a26ec7
Merge pull request #1710 from Mr-Rm/v2/fix-valuelist
EvilBeaver Aug 7, 2026
a9adb85
Merge pull request #1711 from Stivo182/feature/write-json-date
EvilBeaver Aug 10, 2026
53c0efd
Merge pull request #1715 from EvilBeaver/dependabot/github_actions/ac…
EvilBeaver Aug 10, 2026
51bb80a
Bump actions/setup-java from 5.6.0 to 5.7.0
dependabot[bot] Aug 10, 2026
6af8bb5
Merge pull request #1716 from EvilBeaver/dependabot/github_actions/ac…
EvilBeaver Aug 11, 2026
c71a512
Исправлена потокобезопасность ФоновыеЗадания (#1718)
cursoragent Aug 15, 2026
7db2a4a
ОжидатьЗавершенияЗадач не удаляет задания после снимка
cursoragent Aug 15, 2026
7c41a0c
Исправить ожидаемое число методов в CanInjectContext_As_Symbols
cursoragent Aug 15, 2026
dc8c0a7
Исправлена потокобезопасность ФоновыеЗадания (#1718)
EvilBeaver Aug 15, 2026
a065cce
Merge pull request #1720 from EvilBeaver/cursor/fix-native-compiler-t…
EvilBeaver Aug 15, 2026
c138fdd
тесты на поведение дат
EvilBeaver Aug 16, 2026
6c1e360
Закрепление версии языка для 8.0 (не будет зависеть от установленного…
EvilBeaver Aug 16, 2026
ee8dfb4
Приведение точности дат к 1С.
EvilBeaver Aug 16, 2026
16bbacd
Исправить обработку неподдерживаемых операций с датой в DateOffsetOpe…
cursoragent Aug 22, 2026
305f62d
Добавлен CLI-флаг -c для выполнения кода из строки
yukon39 Aug 22, 2026
2fea849
Устранено дублирование IHostApplication между behaviors
yukon39 Aug 22, 2026
983a3b2
Округлять секунды в AddSeconds как decimal без приведения к double
cursoragent Aug 23, 2026
6c2da66
Добавлена глобальная функция ИдентификаторПотокаИсполнения
claude Aug 25, 2026
3b5d116
Обработчик исключений веб-сервера работает в процессе запроса
claude Aug 25, 2026
3cb707c
Процесс запроса хранится в HttpContext.Features
claude Aug 25, 2026
d633efe
Процесс запроса выдаётся scoped-сервисом
claude Aug 25, 2026
e9cadbc
ТекущийПоток() вместо ИдентификаторПотокаИсполнения()
nixel2007 Aug 25, 2026
1e5c1d0
Событие завершения потока исполнения
nixel2007 Aug 25, 2026
e6df864
Завершение потока исполнения по замечаниям ревью
nixel2007 Aug 25, 2026
eb5a996
Изоляция освобождения данных потока и уборка за тестом
nixel2007 Aug 25, 2026
4ee6035
Процесс сам завершает свой поток исполнения
nixel2007 Aug 27, 2026
12861a5
Процесс освобождает свою область сервисов
nixel2007 Aug 27, 2026
b294e9c
Bump actions/setup-java from 5.7.0 to 6.0.0
dependabot[bot] Aug 27, 2026
a198f31
Merge pull request #1728 from EvilBeaver/dependabot/github_actions/ac…
nixel2007 Aug 28, 2026
24fb88c
Упростить DateOffsetOperation по замечанию ревью
cursoragent Aug 30, 2026
e58c3d1
Переделка подхода к BslПроцессу, вариант с протекающим враппером.
EvilBeaver Aug 30, 2026
7284463
Вынес контекст из папки Threads
EvilBeaver Aug 30, 2026
e29b496
Поправил тесты
EvilBeaver Aug 30, 2026
558dc30
Фикс теста конвертера xmldoc
EvilBeaver Aug 30, 2026
846aae6
Merge pull request #1721 from EvilBeaver/feature/date-compatibility
EvilBeaver Aug 30, 2026
6ea1d6c
Merge pull request #1690 from Bayselonarrend/feature/installer
EvilBeaver Aug 30, 2026
a8f6d58
Исправить совместимость Native API с 1С (#1359)
EvilBeaver Aug 30, 2026
f796d9d
Исправлены возможные утечки памяти в Variant
EvilBeaver Aug 31, 2026
1db0ff3
Merge pull request #1725 from nixel2007/claude/webserver-thread-id-1c…
EvilBeaver Aug 31, 2026
3ce8c11
Merge pull request #1724 from yukon39/feature/1723-cli-eval
EvilBeaver Sep 1, 2026
5ae1357
Уточнил формат записи в ReleaseNotes
EvilBeaver Sep 1, 2026
2654383
Описание нового релиза
EvilBeaver Sep 1, 2026
207770e
ArgumentsParser поддерживает экранирование кавычки удвоением
claude Sep 1, 2026
7711988
Merge pull request #1730 from nixel2007/claude/arguments-parser-escap…
EvilBeaver Sep 1, 2026
4023b72
Исправлена гонка в ПрочитатьСтроку(): потоки вывода процесса переведе…
claude Sep 1, 2026
204e20a
Исправления по замечаниям ревью
claude Sep 1, 2026
8c8c28b
Исправления по замечаниям ревью: сканирование строк и остановка чтения
claude Sep 1, 2026
2cb1a5d
Merge pull request #1729 from nixel2007/claude/issue-1726-zzklh1
EvilBeaver Sep 2, 2026
2b4b777
Поставляемый opm обновлен до версии 1.6.5
EvilBeaver Sep 5, 2026
669c951
Merge branch 'develop' of https://github.com/EvilBeaver/OneScript int…
EvilBeaver Sep 5, 2026
9df7dec
Поставляемый opm обновлен до версии 1.7.1
EvilBeaver Sep 5, 2026
e1e5d5b
Merge branch 'develop' into publish/2.2.0
EvilBeaver Sep 5, 2026
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 .cursor/skills/release-notes/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ git --no-pager log --pretty="* %%s" --no-merges %TAGNAME%..HEAD

Те коммиты, которые ссылок на гитхаб не содержат, ты должен просто прочитать и решить - стоит их включать в release-notes или нет, содержат ли они описание конкретной сделанной функциональности, или это промежуточный, технический и не требующий публикации коммит.

Далее, ты должен сделать итоговый дайджест того, что было сделано в версии и записать это в файл install/release-notes.md. Каждая задача это отдельный bullet-point, причем ссылки на github должны быть сделаны в markdown реальными кликабельными ссылками.
Далее, ты должен сделать итоговый дайджест того, что было сделано в версии и записать это в файл install/release-notes.md. Каждая задача это отдельный bullet-point, причем ссылки на github должны быть сделаны в markdown реальными кликабельными ссылками. Формат строго следующий: сначала ссылка на задачу, потом описание. Если ссылку создать невозможно, тогда только текст задачи.

## Формат файла release-notes

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/copilot-setup-steps.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ jobs:
# Setup steps for OneScript development environment
steps:
- name: Checkout code
uses: actions/checkout@v6
uses: actions/checkout@v7

- run: git config --global core.quotepath false

- uses: actions/setup-dotnet@v5
- uses: actions/setup-dotnet@v6
with:
dotnet-version: '8.0.x'

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/rebase.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the latest code
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
fetch-depth: 0 # otherwise, you will fail to push refs to dest repo
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/sonar.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,22 @@ jobs:
if: (github.repository == 'EvilBeaver/OneScript' ) && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.event.repository.full_name)
steps:
- name: Set up JDK 17
uses: actions/setup-java@v5
uses: actions/setup-java@v6.0.0
with:
java-version: 17
distribution: temurin
- uses: actions/checkout@v6
- uses: actions/checkout@v7
with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
- name: Cache SonarQube packages
uses: actions/cache@v5
uses: actions/cache@v6
with:
path: ~\sonar\cache
key: ${{ runner.os }}-sonar
restore-keys: ${{ runner.os }}-sonar
- name: Cache SonarQube scanner
id: cache-sonar-scanner
uses: actions/cache@v5
uses: actions/cache@v6
with:
path: .\.sonar\scanner
key: ${{ runner.os }}-sonar-scanner
Expand Down
2 changes: 1 addition & 1 deletion Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ pipeline {
agent none

environment {
VersionPrefix = '2.1.0'
VersionPrefix = '2.2.0'
outputEnc = '65001'
}

Expand Down
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,18 @@ dotnet msbuild Build.csproj /t:BuildDocumentation
dotnet build src/oscript/oscript.csproj
```

### Тесты NativeApi (`native-api.os`)

Проверяют поддержку внешних компонент NativeApi. На macOS не запускаются.

Нужен компилятор C++ (см. раздел «Ручная локальная сборка»). Сборка нативных компонент (прокси `ScriptEngine.NativeApi` и тестовая `AddInNative` из `tests/native-api/`) и прогон приёмочных тестов, включая `native-api.os`:

```bat
dotnet msbuild Build.csproj /t:BuildAll;Test
```

Без C++-компилятора нативная часть не собирается (`NoCppCompiler=True`), и эти тесты пройти не смогут.

# Документация для разработчиков

Если вы хотите контрибьютить в проект, познакомьтесь с дополнительными документами в каталоге [`docs/`](docs/):
Expand Down
Binary file added install/WizardImage.bmp
Binary file not shown.
277 changes: 277 additions & 0 deletions install/install.iss
Original file line number Diff line number Diff line change
@@ -0,0 +1,277 @@
#include <ISPPBuiltins.iss>

#define MyAppName "OneScript"
#define MyAppPublisher "EvilBeaver"
#define MyAppURL "https://oscript.io"

#define VerMajor
#define VerMinor
#define VerRelease
#define Build

#define ArtifactRoot "..\built\tmp"
#define OvmExeSource "ovm.exe"

#define WizardImageSource "WizardImage.bmp"
#define LicenseSource "..\LICENSE"


#ifndef Suffix
#define Suffix "x86"
#endif

#if Suffix == "x64"
#define Binaries="bin"
#else
#define Binaries="bin32"
#endif

#expr GetVersionComponents(ArtifactRoot + "\" + Binaries + "\ScriptEngine.dll", VerMajor, VerMinor, VerRelease, Build)

[Setup]
AppName = {#MyAppName}
AppVersion = {#VerMajor}.{#VerMinor}.{#VerRelease}
AppPublisher = {#MyAppPublisher}
AppPublisherURL = {#MyAppURL}
AppSupportURL = {#MyAppURL}
AppUpdatesURL = {#MyAppURL}
DefaultDirName = {localappdata}\OneScript
LicenseFile = {#LicenseSource}
DisableProgramGroupPage = yes
OutputBaseFilename = "OneScript-{#VerMajor}.{#VerMinor}.{#VerRelease}-{#Suffix}"
Compression = lzma
SolidCompression = yes
WizardStyle = modern
DisableWelcomePage = no
WizardImageFile = {#WizardImageSource}
PrivilegesRequired = lowest

#if Suffix == "x64"
ArchitecturesInstallIn64BitMode="x64"
#endif

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: "{#ArtifactRoot}\*"; DestDir: "{app}\{#VerMajor}.{#VerMinor}.{#VerRelease}"; Flags: recursesubdirs
Source: "{#OvmExeSource}"; DestDir: "{app}"; DestName: "ovm.exe"; Check: InstallOvmSelected


[UninstallDelete]
Type: filesandordirs; Name: "{app}\{#VerMajor}.{#VerMinor}.{#VerRelease}"

[Code]

var
OvmPage: TWizardPage;
OvmIntroLabel: TNewStaticText;
InstallOvmCheckBox: TNewCheckBox;

procedure InitializeWizard;
begin
OvmPage := CreateCustomPage(wpSelectDir,
'Менеджер версий OVM',
'Установка менеджера версий OneScript');

OvmIntroLabel := TNewStaticText.Create(OvmPage);
OvmIntroLabel.Parent := OvmPage.Surface;
OvmIntroLabel.Left := 0;
OvmIntroLabel.Top := 0;
OvmIntroLabel.Width := OvmPage.SurfaceWidth;
OvmIntroLabel.Height := ScaleY(40);
OvmIntroLabel.AutoSize := False;
OvmIntroLabel.WordWrap := True;
OvmIntroLabel.Caption :=
'OneScript Version Manager (OVM) - утилита, предназначенная для установки, обновления и переключения между различными версиями OneScript';

InstallOvmCheckBox := TNewCheckBox.Create(OvmPage);
InstallOvmCheckBox.Parent := OvmPage.Surface;
InstallOvmCheckBox.Left := 0;
InstallOvmCheckBox.Top := OvmIntroLabel.Top + OvmIntroLabel.Height + ScaleY(14);
InstallOvmCheckBox.Width := OvmPage.SurfaceWidth;
InstallOvmCheckBox.Caption := 'Установить OVM';
InstallOvmCheckBox.Checked := True;
end;

function InstallOvmSelected(): Boolean;
begin
Result := InstallOvmCheckBox.Checked;
end;

function RemoveDirectoryLink(const LinkPath: String): Boolean;
var
ResultCode: Integer;
begin
if not DirExists(LinkPath) then
begin
Result := True;
Exit;
end;
Result := Exec('cmd.exe', '/C rmdir "' + LinkPath + '"',
'', SW_HIDE, ewWaitUntilTerminated, ResultCode) and (ResultCode = 0);
end;

function CreateDirectoryJunction(const LinkPath, TargetPath: String): Boolean;
var
ResultCode: Integer;
begin
if not DirExists(TargetPath) then
begin
MsgBox('Каталог версии OneScript не найден:' + #13#10 + TargetPath, mbError, MB_OK);
Result := False;
Exit;
end;

if not RemoveDirectoryLink(LinkPath) then
begin
MsgBox('Не удалось удалить существующую ссылку current:' + #13#10 + LinkPath, mbError, MB_OK);
Result := False;
Exit;
end;

Result := Exec('cmd.exe', '/C mklink /J "' + LinkPath + '" "' + TargetPath + '"',
'', SW_HIDE, ewWaitUntilTerminated, ResultCode) and (ResultCode = 0);

if not Result then
MsgBox(
'Не удалось создать junction current -> версия.' + #13#10 +
'Запустите установщик от имени администратора или включите режим разработчика Windows.' + #13#10#13#10 +
'Link: ' + LinkPath + #13#10 +
'Target: ' + TargetPath,
mbError, MB_OK);
end;

function PathContains(const Path, Entry: String): Boolean;
begin
Result := Pos(';' + Entry + ';', ';' + Path + ';') > 0;
end;

function NeedsAddPath(const Param: String): Boolean;
var
OrigPath: String;
begin
if not RegQueryStringValue(HKEY_CURRENT_USER, 'Environment', 'Path', OrigPath) then
begin
Result := True;
Exit;
end;
Result := not PathContains(OrigPath, Param);
end;

procedure PrependUserPath(const Entry: String);
var
OldPath, NewPath: String;
begin
if not NeedsAddPath(Entry) then
Exit;
if RegQueryStringValue(HKEY_CURRENT_USER, 'Environment', 'Path', OldPath) then
begin
if OldPath = '' then
NewPath := Entry
else
NewPath := Entry + ';' + OldPath;
RegWriteExpandStringValue(HKEY_CURRENT_USER, 'Environment', 'Path', NewPath);
end
else
RegWriteExpandStringValue(HKEY_CURRENT_USER, 'Environment', 'Path', Entry);
end;

procedure ActivateOneScriptLikeOvm(const InstallDir: String);
var
VersionDir, CurrentLink, OscriptBin, OldPath, NewPath: String;
begin
VersionDir := InstallDir + '\{#VerMajor}.{#VerMinor}.{#VerRelease}';
CurrentLink := InstallDir + '\current';
OscriptBin := CurrentLink + '\bin';

if not CreateDirectoryJunction(CurrentLink, VersionDir) then
Exit;

if InstallOvmSelected then
begin
RegWriteStringValue(HKEY_CURRENT_USER, 'Environment', 'OVM_INSTALL_PATH', InstallDir);

RegWriteExpandStringValue(HKEY_CURRENT_USER, 'Environment', 'OVM_OSCRIPTBIN', OscriptBin);

if RegQueryStringValue(HKEY_CURRENT_USER, 'Environment', 'Path', OldPath) then
begin
if not PathContains(OldPath, '%OVM_OSCRIPTBIN%') then
begin
if OldPath = '' then
NewPath := '%OVM_OSCRIPTBIN%'
else
NewPath := '%OVM_OSCRIPTBIN%;' + OldPath;
RegWriteExpandStringValue(HKEY_CURRENT_USER, 'Environment', 'Path', NewPath);
end;
end
else
RegWriteExpandStringValue(HKEY_CURRENT_USER, 'Environment', 'Path', '%OVM_OSCRIPTBIN%');

if NeedsAddPath(InstallDir) then
begin
if RegQueryStringValue(HKEY_CURRENT_USER, 'Environment', 'Path', OldPath) then
begin
if OldPath = '' then
NewPath := InstallDir
else
NewPath := OldPath + ';' + InstallDir;
RegWriteExpandStringValue(HKEY_CURRENT_USER, 'Environment', 'Path', NewPath);
end
else
RegWriteExpandStringValue(HKEY_CURRENT_USER, 'Environment', 'Path', InstallDir);
end;
Exit;
end;

PrependUserPath(OscriptBin);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
ActivateOneScriptLikeOvm(ExpandConstant('{app}'));
end;

function RemoveFromPath(const Path, Entry: String): String;
var
ResultPath: String;
begin
ResultPath := Path;
StringChangeEx(ResultPath, Entry + ';', '', True);
StringChangeEx(ResultPath, ';' + Entry, '', True);
if ResultPath = Entry then
ResultPath := '';
Result := ResultPath;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
InstallDir, ExistingValue, OldPath, NewPath: String;
begin
if CurUninstallStep = usPostUninstall then
begin
InstallDir := ExpandConstant('{app}');

RemoveDirectoryLink(InstallDir + '\current');

if RegQueryStringValue(HKEY_CURRENT_USER, 'Environment', 'OVM_INSTALL_PATH', ExistingValue) then
if ExistingValue = InstallDir then
RegDeleteValue(HKEY_CURRENT_USER, 'Environment', 'OVM_INSTALL_PATH');

if RegQueryStringValue(HKEY_CURRENT_USER, 'Environment', 'OVM_OSCRIPTBIN', ExistingValue) then
if ExistingValue = InstallDir + '\current\bin' then
RegDeleteValue(HKEY_CURRENT_USER, 'Environment', 'OVM_OSCRIPTBIN');

if RegQueryStringValue(HKEY_CURRENT_USER, 'Environment', 'Path', OldPath) then
begin
NewPath := RemoveFromPath(OldPath, '%OVM_OSCRIPTBIN%');
NewPath := RemoveFromPath(NewPath, InstallDir + '\current\bin');
NewPath := RemoveFromPath(NewPath, InstallDir);
if NewPath = '' then
RegDeleteValue(HKEY_CURRENT_USER, 'Environment', 'Path')
else
RegWriteExpandStringValue(HKEY_CURRENT_USER, 'Environment', 'Path', NewPath);
end;
end;
end;
Binary file modified install/opm.ospx
Binary file not shown.
Loading
Loading