![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Автоматическое редактирование файла.config |
|
|
Любой язык - [решено] Автоматическое редактирование файла.config
|
Пользователь Сообщения: 51 |
Добрый день.
Вообщем создал инсталятор которые распаковывает приложение в определенную папку. Приложение периодически обновляется (добавляются новые библиотеки и т.д.) в связи с чем в конфигурационный файлик добавляются новые строки. Так как приложение находится на разных объектах и имеет разные коммутационные настройки то запихнуть в инсталятор общий файлик конфигурации я не могу. Идея в том что бы при запуске инсталятора запускался как нибудь .bat или другое средство, который бы добавлял в тестовый фаил нужные строчки, при этом не трогая остальную часть файла. Конфигурационный файл выглядит примерно так(маленькая часть): <add key="SkipPreSelect" value="false" /> <add key="RefundLockTime" value="20" /> <add key="UseSverkaDiff" value="false" /> </appSettings> т.е. новые параметры нужно добавлять между строк <add key="UseDiff" value="false" /> и </appSettings>, а так же учесть что если данные параметры есть то их трогать не нужно. Подскажите каким способом это можно реализовать? и если есть готовые решения то я буду рад их принять ![]() Заранее большое спасибо. |
|
Отправлено: 14:28, 12-02-2017 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Armsinglom:
Цитата Armsinglom:
Цитата Armsinglom:
Цитата Armsinglom:
Цитата Armsinglom:
|
|||||
Отправлено: 14:45, 12-02-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 51
|
Профиль | Отправить PM | Цитировать Smart Install Maker 5.04 сделал. cfg.rar Они постоянно разные, предоставляются разработчиком, выглядят примерно так: <add key="SkipPreSelect" value="false" /> <add key="RefundLockTime" value="20" /> <add key="UseSverkaDiff" value="false" /> и закрываются командой </appSettings>
На точках Win7 32 битка. Доменных политик на данный момент нет, будут в не скором будущем..... |
Отправлено: 15:31, 12-02-2017 | #3 |
Пользователь Сообщения: 51
|
Профиль | Отправить PM | Цитировать Перефразирую немного что бы было понятнее, каким образом можно в текстовом файле добавить между строк
<add key="UseSverkaDiff" value="false" /> </appSettings> добавить строчки <add key="SkipPreSelect" value="false" /> <add key="RefundLockTime" value="20" /> что бы получилось : <add key="UseSverkaDiff" value="false" /> <add key="SkipPreSelect" value="false" /> <add key="RefundLockTime" value="20" /> </appSettings> Естественно что бы при этом не пострадала информация сверху и снизу данного файла, и в случае если на момент применения скрипта там были уже эти строчки то они просто заменились бы. |
Отправлено: 10:33, 13-02-2017 | #4 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Armsinglom,
Цитата Armsinglom:
Цитата Armsinglom:
Цитата:
|
||||
------- Отправлено: 16:05, 13-02-2017 | #5 |
Пользователь Сообщения: 51
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Цитата Armsinglom:
Вот и хотел бы автоматизировать наполнение файла cfg, так как обновляют третьи лица которым доверия нет, хотел как можно больше исключить человеческий фактор.... |
||
Отправлено: 18:31, 13-02-2017 | #6 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Как вариант, написал на js, так как польстился на то, что имеется 2 варианта обозначения литерала
var Conf = 'Z:\\Box_In\\cfg.Config' var ConfOut = 'Z:\\Box_In\\cfg.Config' var Snew = new Array ( ' <add key="SkipPreSelect" value="kuku" />', ' <add key = "RefundLockTime" value="33" />', ' <add key = "iiiUseSverkaDiff" value="false" />' ); var Send='</appSettings>'; var Skey='<add key'; var Skeyend='>'; var l=Snew.length; var rn = String.fromCharCode(13,10); var FSO,FConf,SConf; FSO=WScript.CreateObject("Scripting.FileSystemObject"); FConf = FSO.OpenTextFile(Conf,1); SConf = FConf.ReadAll(); FConf.Close(); while (SConf.indexOf(Skey+' ')>0) SConf = SConf.replace(Skey+' ',Skey); while (SConf.indexOf(Skey+'= ')>0) SConf = SConf.replace(Skey+'= ',Skey+'='); var Nend,NNend,SSnew,j,jfind,Tkey,Told; NNend = SConf.indexOf(Send); Nend = SConf.lastIndexOf(String.fromCharCode(13),NNend); SSold = SConf.slice(Nend,NNend)+Send; SSnew = SSold; for (var i=l-1; i >=0; i--) { while (Snew[i].indexOf(Skey+' ')>0) Snew[i] = Snew[i].replace(Skey+' ',Skey); while (Snew[i].indexOf(Skey+'= ')>0) Snew[i] = Snew[i].replace(Skey+'= ',Skey+'='); Tkey = Skey + '="'; j = Snew[i].lastIndexOf(Tkey); Tkey = Snew[i].slice(j,Snew[i].indexOf('"',j+Tkey.length)+1); jfind = SConf.indexOf(Tkey); if (jfind<0) { SSnew = rn+Snew[i]+SSnew; } else { Told = SConf.slice(jfind,SConf.indexOf(Skeyend,jfind)+1); Tkey = Snew[i].slice(j,Snew[i].indexOf(Skeyend,j)+1); SConf = SConf.replace(Told,Tkey); // WScript.Echo(Told+rn+Tkey); }; } SConf = SConf.replace(SSold,SSnew); FConf = FSO.CreateTextFile(ConfOut,2); FConf.Write(SConf); FConf.Close(); |
------- Последний раз редактировалось megaloman, 13-02-2017 в 21:10. Отправлено: 20:47, 13-02-2017 | #7 |
Пользователь Сообщения: 51
|
Профиль | Отправить PM | Цитировать Спасибо огромное, работает как надо!!!!
Данный скрипт можно использовать в случае изменения параметра с true на false и наоборот, что не может не радовать... Еще раз спасибо!!! |
Отправлено: 09:06, 14-02-2017 | #8 |
Пользователь Сообщения: 51
|
Профиль | Отправить PM | Цитировать megaloman не сочти за наглость, а можно этот скрипт заставить что бы он удалял все строки между
<add key="UseSverkaDiff" value="false" /> и </appSettings> и прописывал то что я укажу, т .е. не важно какие между этими строками были параметры и строки, он их затрёт и впишет нужные мне. |
Отправлено: 15:02, 14-02-2017 | #9 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать можно этот скрипт заставить чтобы он удалял все строки между
var Conf = 'Z:\\Box_In\\cfg.Config' var ConfOut = 'Z:\\Box_In\\cfg.Config' var Snew = new Array ( ' <add key="SkipPreSelect" value="tra la la" />', ' <add key="RefundLockTime" value="777" />', ' <add key="aaaRefundLockTime" value="111777" />', ' <add key="bbbRefundLockTime" value="222777" />', ' <add key="UseSverkaDiff" value="false" />' ); var Sdel; Sdel = '<add key="UseSverkaDiff"'; //Sdel = '<appSettings>'; var Send='</appSettings>'; var Skey='<add key'; var Skeyend='>'; var l=Snew.length; var rn = String.fromCharCode(13,10); var FSO,FConf,SConf; FSO=WScript.CreateObject("Scripting.FileSystemObject"); FConf = FSO.OpenTextFile(Conf,1); SConf = FConf.ReadAll(); FConf.Close(); while (SConf.indexOf(Skey+' ')>0) SConf = SConf.replace(Skey+' ',Skey); while (SConf.indexOf(Skey+'= ')>0) SConf = SConf.replace(Skey+'= ',Skey+'='); var Ndel = SConf.indexOf(Sdel); Ndel = SConf.indexOf(String.fromCharCode(10),Ndel); var Nend,NNend,SSnew,j,jfind,Tkey,Told; NNend = SConf.indexOf(Send); Nend = SConf.lastIndexOf(String.fromCharCode(13),NNend); if (Ndel>=0) { SConf = SConf.replace(SConf.slice(Ndel,Nend+1),''); NNend = SConf.indexOf(Send); Nend = SConf.lastIndexOf(String.fromCharCode(13),NNend); } SSold = SConf.slice(Nend,NNend)+Send; SSnew = SSold; for (var i=l-1; i >=0; i--) { while (Snew[i].indexOf(Skey+' ')>0) Snew[i] = Snew[i].replace(Skey+' ',Skey); while (Snew[i].indexOf(Skey+'= ')>0) Snew[i] = Snew[i].replace(Skey+'= ',Skey+'='); Tkey = Skey + '="'; j = Snew[i].lastIndexOf(Tkey); Tkey = Snew[i].slice(j,Snew[i].indexOf('"',j+Tkey.length)+1); jfind = SConf.indexOf(Tkey); if (jfind<0) { SSnew = rn+Snew[i]+SSnew; } else { Told = SConf.slice(jfind,SConf.indexOf(Skeyend,jfind)+1); Tkey = Snew[i].slice(j,Snew[i].indexOf(Skeyend,j)+1); SConf = SConf.replace(Told,Tkey); // WScript.Echo(Told+rn+Tkey); }; } SConf = SConf.replace(SSold,SSnew); FConf = FSO.CreateTextFile(ConfOut,2); FConf.Write(SConf); FConf.Close(); Sdel = '<appSettings>'; (сейчас это закомментировано и не работает) и заново вбить скриптом всё что нужно. Сейчас Sdel = '<add key="UseSverkaDiff"'; Я не стал писАть как Вы указали: <add key="UseSverkaDiff" value="false" /> посчитал это избыточным. Но если Вам надо именно так - делайте. Сначала делается удаление, а затем вставка (замена) |
------- Отправлено: 17:45, 14-02-2017 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Редактирование swf файла | shveicar | Вебмастеру | 0 | 05-05-2012 15:32 | |
Доступ - Windows 7 starter. Где находится config.nt и config.sys. Что их заменяет? | Надежда_Абрамова@vk | Microsoft Windows 7 | 1 | 14-03-2012 23:53 | |
ASUS P5E постоянно виснет, или нет файла WINDOWS/SYSTEM32/CONFIG/SYSTEM | грузь | Непонятные проблемы с Железом | 8 | 13-09-2008 10:04 | |
[решено] Автоматическое редактирование настроек DCOM | madmax24 | Microsoft Windows NT/2000/2003 | 2 | 01-07-2008 08:29 | |
Нужно автоматическое резервное копирование папки config | babki | Microsoft Windows NT/2000/2003 | 6 | 30-11-2006 13:31 |
|