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

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

Ситуация связана с Oracle Forms. Им, для правильной работы необходима переменная FORMS60_PATH. Она может храниться как в переменных среды, так и в реестре.
Чтобы осуществить запуск форм, настроенных на разные пути сделал vbs скрипт, прописывающий в переменные среды процесса нужные пути. Все работает хорошо, за исключением случая, когда пути слишком длинные в переменной FORMS60_PATH. В этом случае формса сваливается. Но если прописать эти пути в реестр или в переменные среды пользовательские, то все работает хорошо.
Получается что, при присвоении длинного значения переменной FORMS60_PATH для процесса, возникает ошибка.
Ищу способ обойти данную проблему.
Запись значения в реестр или в пользовательскую переменную не пойдет, т.к. она остается в памяти и последующий запуск формы без перепрописывания этой переменной приведет к неправильной работе системы
...
Рейтинг: 0 / 0
08.08.2016, 14:32
    #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
08.08.2016, 15:34
    #39288380
Karlus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при прописывании переменных сред на процесс
Akina,
Сейчас перепроверил. Действительно, проблема именно в том что форса не может такую длинную переменную обработать. Хотя из реестра она ее читает нормально.
...
Рейтинг: 0 / 0
08.08.2016, 16:30
    #39288430
Karlus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при прописывании переменных сред на процесс
Может посоветуете вариант типа mklink, но создавать линк на сессию, а не постоянный. Есть такая возможность. Это бы решило проблему
...
Рейтинг: 0 / 0
08.08.2016, 17:06
    #39288466
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при прописывании переменных сред на процесс
Karlusпроблема именно в том что форса не может такую длинную переменную обработать. Хотя из реестра она ее читает нормально.Ну так клади её в реестр, какие проблемы?
...
Рейтинг: 0 / 0
09.08.2016, 10:34
    #39288747
Karlus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при прописывании переменных сред на процесс
Akina,
В реестр не подходит. Т.к. в реестре ветка остается. Ее придется перезаписывать каждый раз при запуске.
У меня есть набор иконок, который запускают формы со значениями переменных "по умолчанию", т.е. которые указаны в реестре.
А мне нужно создать набор иконок, которые буду запускаться с иными значениями переменных. Для этого я использую vbs скрипт, который на процесс создает набор переменных. Они не сохраняются в памяти после завершения процесса.
А при записи в реестр необходимо будет как-то отслеживать завершение процесса и исправлять значение реестра обратно.
Нашел временное решение созданием символической ссылки (mklink /d)на ресурс с формами с более коротким именем. В этом случае у меня все отрабатывает, но остается один минус. Ссылка не удаляется. Как бы ее создавать на процесс?
...
Рейтинг: 0 / 0
09.08.2016, 12:30
    #39288832
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при прописывании переменных сред на процесс
KarlusДля этого я использую vbs скрипт, который на процесс создает набор переменных. Они не сохраняются в памяти после завершения процесса.
Используйте запуск через CMD (или BAT), в нём устанавливайте нужные переменные, а потом стартуйте свой VBS-скрипт (или сразу приложение). Тогда приложение получит копию среды от родительского процесса с нужными значениями, а по завершении оно благополучно утеряется.
Если не нравится мерцающее окно компроцессора - то из VBS запускайте этот CMD со скрытым окном. Более того, я бы вообще предложил из начального VBS создавать и требуемый CMD, и, если надо, финишный VBS (во временном каталоге), а потом их запускать. При этом текст вторичных запускаемых файлов будет полностью в коде начального VBS - несложно сопровождать и править.

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

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


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