powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Windows [игнор отключен] [закрыт для гостей] / Ошибка при прописывании переменных сред на процесс
17 сообщений из 17, страница 1 из 1
Ошибка при прописывании переменных сред на процесс
    #39287034
Karlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Скриптом vbs прописываю переменные среды на процесс:
Set Env = cmd.Environment("Process")
Env("TEST") = "много букв"
Проблема в следующем. Если букв не очень много, то все хорошо. А если букв действительно много, то прописывается не вся ветка.
С переменными средами "USERS" все решается легко в реестре меняется тип переменной с REG_SZ на REG_EXPSND_SZ.
"много букв" - представляет из себя список путей к папкам, как Path, с кучей повторяющихся путей.
Может кто подскажет, где хранятся переменные на "Process" в реестре или каким иным способом обойти проблему?
Может можно как-то указывать относительный путь?
...
Рейтинг: 0 / 0
Ошибка при прописывании переменных сред на процесс
    #39287142
Karlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может можно как-то сделать из одной переменной ссылку на другую переменную?
...
Рейтинг: 0 / 0
Ошибка при прописывании переменных сред на процесс
    #39288092
Karlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неужели никто не знает, как обойти эту проблему?
...
Рейтинг: 0 / 0
Ошибка при прописывании переменных сред на процесс
    #39288237
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Karlusгде хранятся переменные на "Process" в реестре
Копия среды для отдельного процесса хранится только в памяти.

Karlusможно как-то сделать из одной переменной ссылку на другую переменную?
Нет - переменные являются статическими строками. Но можно ПРИСВОИТЬ одной переменной значение другой - тривиальным SET var2=%var1%
...
Рейтинг: 0 / 0
Ошибка при прописывании переменных сред на процесс
    #39288274
Karlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Но если присеваемое значение не влазить в область памяти, выделенное под эту переменную.

Ситуация связана с Oracle Forms. Им, для правильной работы необходима переменная FORMS60_PATH. Она может храниться как в переменных среды, так и в реестре.
Чтобы осуществить запуск форм, настроенных на разные пути сделал vbs скрипт, прописывающий в переменные среды процесса нужные пути. Все работает хорошо, за исключением случая, когда пути слишком длинные в переменной FORMS60_PATH. В этом случае формса сваливается. Но если прописать эти пути в реестр или в переменные среды пользовательские, то все работает хорошо.
Получается что, при присвоении длинного значения переменной FORMS60_PATH для процесса, возникает ошибка.
Ищу способ обойти данную проблему.
Запись значения в реестр или в пользовательскую переменную не пойдет, т.к. она остается в памяти и последующий запуск формы без перепрописывания этой переменной приведет к неправильной работе системы
...
Рейтинг: 0 / 0
Ошибка при прописывании переменных сред на процесс
    #39288313
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Karlusприсеваемое значение не влазить в область памяти, выделенное под эту переменную.
Память выделяется не "под переменную", а на блок среды.
KarlusПолучается что, при присвоении длинного значения переменной FORMS60_PATH для процесса, возникает ошибка.
Ищу способ обойти данную проблему.
Не получается у меня воспроизвести проблему:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Dim WshShell, WshProcEnv, temp 
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshProcEnv = WshShell.Environment("Process")
WshProcEnv("ShortString")="Short test string"
WScript.Echo "Length = " & Len(WshProcEnv("ShortString")) & vbNewLine & WshProcEnv("ShortString")
temp = "Long test string "
temp = temp & temp & temp & temp & temp & temp & temp & temp
temp = temp & temp & temp & temp & temp & temp & temp & temp
temp = temp & temp & temp & temp & temp & temp & temp & temp
temp = temp & temp & temp & temp
WshProcEnv("LongString") = temp
WScript.Echo "Length = " & Len(WshProcEnv("LongString")) & vbNewLine & WshProcEnv("LongString")

Обе переменные присваиваются без проблем, при этом длинная более 32 кбайт.
...
Рейтинг: 0 / 0
Ошибка при прописывании переменных сред на процесс
    #39288380
Karlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Сейчас перепроверил. Действительно, проблема именно в том что форса не может такую длинную переменную обработать. Хотя из реестра она ее читает нормально.
...
Рейтинг: 0 / 0
Ошибка при прописывании переменных сред на процесс
    #39288430
Karlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может посоветуете вариант типа mklink, но создавать линк на сессию, а не постоянный. Есть такая возможность. Это бы решило проблему
...
Рейтинг: 0 / 0
Ошибка при прописывании переменных сред на процесс
    #39288466
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Karlusпроблема именно в том что форса не может такую длинную переменную обработать. Хотя из реестра она ее читает нормально.Ну так клади её в реестр, какие проблемы?
...
Рейтинг: 0 / 0
Ошибка при прописывании переменных сред на процесс
    #39288747
Karlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
В реестр не подходит. Т.к. в реестре ветка остается. Ее придется перезаписывать каждый раз при запуске.
У меня есть набор иконок, который запускают формы со значениями переменных "по умолчанию", т.е. которые указаны в реестре.
А мне нужно создать набор иконок, которые буду запускаться с иными значениями переменных. Для этого я использую vbs скрипт, который на процесс создает набор переменных. Они не сохраняются в памяти после завершения процесса.
А при записи в реестр необходимо будет как-то отслеживать завершение процесса и исправлять значение реестра обратно.
Нашел временное решение созданием символической ссылки (mklink /d)на ресурс с формами с более коротким именем. В этом случае у меня все отрабатывает, но остается один минус. Ссылка не удаляется. Как бы ее создавать на процесс?
...
Рейтинг: 0 / 0
Ошибка при прописывании переменных сред на процесс
    #39288832
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KarlusДля этого я использую vbs скрипт, который на процесс создает набор переменных. Они не сохраняются в памяти после завершения процесса.
Используйте запуск через CMD (или BAT), в нём устанавливайте нужные переменные, а потом стартуйте свой VBS-скрипт (или сразу приложение). Тогда приложение получит копию среды от родительского процесса с нужными значениями, а по завершении оно благополучно утеряется.
Если не нравится мерцающее окно компроцессора - то из VBS запускайте этот CMD со скрытым окном. Более того, я бы вообще предложил из начального VBS создавать и требуемый CMD, и, если надо, финишный VBS (во временном каталоге), а потом их запускать. При этом текст вторичных запускаемых файлов будет полностью в коде начального VBS - несложно сопровождать и править.

Есть и альтернативный вариант - создание для "особого" запуска приложения специального пользовательского профиля и запуск приложения от его имени. Ну и статическая настройка среды этого профиля в тот самый "особый" режим.

PS. Неужели эта самая Oracle Forms не умеет из командной строки получить параметры запуска или имя файла конфигурации?
...
Рейтинг: 0 / 0
Ошибка при прописывании переменных сред на процесс
    #39288895
Karlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Oracle Forms это динозавр, он много чего не умеет.
Не очень понял про CMD или BAT. Разницы же особой нет межу CMD, BAT и VBS.
VBS не догма, просто я ее использовал для написания скрипта запуска формы.
Получается мне не подходит просто прописать параметры, так как сама формса не жрет переменную такой длины. Мне нужно как-то после окончания работы процесса удалить линк. Но, на сколько я понял, мелкософт пока такого не делает, как создание линка на сессию
...
Рейтинг: 0 / 0
Ошибка при прописывании переменных сред на процесс
    #39289069
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Karlusпри записи в реестр необходимо будет как-то отслеживать завершение процесса и исправлять значение реестра обратно.
В VBS (да и в CMD) вполне себе можно запустить дочерний процесс с приостановкой выполнения скрипта до окончания его работы, а потом подчистить хвосты. Например...
...
Рейтинг: 0 / 0
Ошибка при прописывании переменных сред на процесс
    #39289077
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Karlusмне не подходит просто прописать параметры, так как сама формса не жрет переменную такой длины.
KarlusМожет посоветуете вариант типа mklink, но создавать линк на сессию, а не постоянный.
Может, посмотреть в направлении SUBST?
...
Рейтинг: 0 / 0
Ошибка при прописывании переменных сред на процесс
    #39289450
Karlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
SUBST тоже создает не на сессию. Диск после работы остается
...
Рейтинг: 0 / 0
Ошибка при прописывании переменных сред на процесс
    #39289663
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KarlusДиск после работы остаетсяДа и хрен бы с им... чем он тебе мешает? а ежели реально мешает - ну дави его из скрипта:
Код: powershell
1.
2.
3.
subst x: y:\longfolder 
start /wait oracleforms.exe
subst x: /d
...
Рейтинг: 0 / 0
Ошибка при прописывании переменных сред на процесс
    #39289738
Karlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Да, пожалуй самый оптимальный вариант получается.
Спасибо огромное!
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Windows [игнор отключен] [закрыт для гостей] / Ошибка при прописывании переменных сред на процесс
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]