<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; Командные файлы и сценарии JScript, совмещённые с файлами реестра]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=7743</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=7743&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Командные файлы и сценарии JScript, совмещённые с файлами реестра».]]></description>
		<lastBuildDate>Thu, 01 Nov 2012 08:20:08 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Командные файлы и сценарии JScript, совмещённые с файлами реестра]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=65299#p65299</link>
			<description><![CDATA[<div class="quotebox"><cite>smaharbA пишет:</cite><blockquote><p>включите управление учетными записями</p></blockquote></div><p>1) Где оно включается?<br />2) И что, если его включить, то все по-отдельности:<br />запуск скриптов,<br />запуск редактора реестра из скриптов… —<br />будет работать, а вместе, как описано — нет?<br /><em>(Что именно не работает?)</em><br />Если не работает какая-то составляющая, то это вопрос немного по другой теме, например:<br />как в Windows 7 запускать редактор реестра или скрипты с необходимыми правами и т.п.</p>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Thu, 01 Nov 2012 08:20:08 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=65299#p65299</guid>
		</item>
		<item>
			<title><![CDATA[Re: Командные файлы и сценарии JScript, совмещённые с файлами реестра]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=65297#p65297</link>
			<description><![CDATA[<p>включите управление учетными записями</p>]]></description>
			<author><![CDATA[null@example.com (smaharbA)]]></author>
			<pubDate>Thu, 01 Nov 2012 03:26:07 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=65297#p65297</guid>
		</item>
		<item>
			<title><![CDATA[Re: Командные файлы и сценарии JScript, совмещённые с файлами реестра]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=65288#p65288</link>
			<description><![CDATA[<div class="quotebox"><cite>smaharbA пишет:</cite><blockquote><p>как заставить такой файл работать в вин 7 ?</p></blockquote></div><p>Проверил: все примеры успешно выполнились в Windows 7.</p>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Wed, 31 Oct 2012 14:17:32 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=65288#p65288</guid>
		</item>
		<item>
			<title><![CDATA[Re: Командные файлы и сценарии JScript, совмещённые с файлами реестра]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=65261#p65261</link>
			<description><![CDATA[<p>замечательно (не стеб) - как заставить такой файл работать в вин 7 ?</p>]]></description>
			<author><![CDATA[null@example.com (smaharbA)]]></author>
			<pubDate>Tue, 30 Oct 2012 14:25:01 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=65261#p65261</guid>
		</item>
		<item>
			<title><![CDATA[Командные файлы и сценарии JScript, совмещённые с файлами реестра]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=65260#p65260</link>
			<description><![CDATA[<p>На сайте «Rob van der Woude&#039;s Scripting Pages» есть <a href="http://www.robvanderwoude.com/regedit.php#SelfContained">пример командного файла, использующего себя как файл реестра</a>:<br /></p><div class="codebox"><pre><code>REGEDIT4

; @ECHO OFF
; CLS
; REGEDIT.EXE /S &quot;%~f0&quot;
; EXIT

[HKEY_CURRENT_USER\Software\Test]
&quot;TestVal&quot;=&quot;Succeeded&quot;</code></pre></div><p>— первой строкой должна быть «REGEDIT4», иначе не будет распознан формат файла реестра; при этом заголовок «Windows Registry Editor Version 5.00» файлов реестра в кодировке Unicode использовать нельзя, т.к. командные файлы не могут быть в Unicode. Поскольку, скорее всего, в текущем каталоге и в каталогах, перечисленных в переменной окружения %PATH%, нет исполняемого файла с именем REGEDIT4, эта строка вызовет сообщение об ошибке (поэтому в примере следом идёт команда очистки окна), но работу командного файла не прервёт (работу командного файла могут прервать лишь <span class="bbu">синтаксические</span> ошибки в нём);</p><p>— точка с запятой является признаком начала комментария в файлах реестра, а с точки зрения обработчика командной строки она (как и запятая) приравнена к пробелу и не мешает исполнению следующей за ней команды (от себя скажу, что это излишняя предосторожность — см. далее).</p><p>Ну и для порядка совсем очевидное:<br />— «REGEDIT.EXE /S &quot;%~f0&quot;» заставляет редактор реестра добавить в реестр данные из самого командного файла, рассматриваемого как файл реестра; ключ /S отключает вывод диалоговых окон подтверждения и успешности действия;<br />— команда EXIT (<em>я</em>: лучше EXIT /B) завершает работу командного файла и предотвращает попытки исполнения следующих за ней строк в формате файла реестра как строк командного файла.</p><p>Если всё же в текущем каталоге или в каталогах, перечисленных в переменной окружения %PATH%, окажется исполняемый файл с именем REGEDIT4, то последствия могут быть непредсказуемыми.<br /><strong>--------------------</strong><br />От этой превратности застрахованы <strong>сценарии JScript, совмещённые с файлами реестра</strong>. В этом случае:</p><p>— для сокрытия строк JScript от редактора реестра (на самом деле это необязательно) по-прежнему годится точка с запятой: она будет рассматриваться JScript как признак конца оператора начатого на предыдущей строке или просто пустого оператора;</p><p>— для сокрытия строк файла реестра (кроме его заголовка — первой строки файла) от JScript (это обязательно) используем блочный комментарий (открывающая «/*» и закрывающая «*/» скобки которого в свою очередь могут быть скрыты от редактора реестра точками с запятыми) — это вопросов не вызывает;</p><p>— в качестве первой строки файла (заголовка файла реестра) по прежнему нельзя использовать «Windows Registry Editor Version 5.00», т.к. эта строка ничему не соответствует в синтаксисе JScript, поэтому нельзя использовать кодировку Unicode; первой строкой может быть только «REGEDIT4», которая соответствует идентификатору переменной или функции в JScript.</p><p>Предположим, мы скрываем от редактора реестра точками с запятыми все строки JScript. В таком случае в первой строке мы получаем оператор «REGEDIT4», представляющий собой выражение возвращающее значение переменной REGEDIT4. Это не вызовет ошибку, если на глобальном уровне будет объявлена переменная или функция с таким именем:<br /></p><div class="codebox"><pre><code>REGEDIT4
;var REGEDIT4

;var WshShell = new ActiveXObject(&quot;WScript.Shell&quot;)
;WshShell.Popup(&quot;Будет создан ключ реестра HKEY_CURRENT_USER\\_Test&quot;)

;WshShell.Run(&quot;regedit.exe \&quot;&quot; + WScript.ScriptFullName + &quot;\&quot;&quot;)
;/*

[HKEY_CURRENT_USER\_Test]
@=&quot;JS + REG = Hello, world!&quot;

;*/</code></pre></div><p>Впрочем, опыт показывает, что если в файле реестра имеются строки ошибочные с точки зрения его формата, то это не препятствует обработке правильных строк и этот пример можно переписать с меньшими предосторожностями:<br /></p><div class="codebox"><pre><code>REGEDIT4
= void null; delete REGEDIT4 /* можно и не удалять, а использовать переменную */;
//или вместо предыдущей строки:
//(); function REGEDIT4() {/* может быть и какой-нибудь код */}

var WshShell = new ActiveXObject(&quot;WScript.Shell&quot;);
WshShell.Popup(&quot;Будет создан ключ реестра HKEY_CURRENT_USER\\_Test&quot;);

WshShell.Run(&quot;regedit.exe \&quot;&quot; + WScript.ScriptFullName + &quot;\&quot;&quot;);
/*

[HKEY_CURRENT_USER\_Test]
@=&quot;JS + REG = Hello, world!&quot;

*/</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Tue, 30 Oct 2012 14:23:01 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=65260#p65260</guid>
		</item>
	</channel>
</rss>
