<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; vbs/hta: обмен "клиента" к "серверу", работающими под разными учетками]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=7457</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7457&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «vbs/hta: обмен "клиента" к "серверу", работающими под разными учетками».]]></description>
		<lastBuildDate>Wed, 29 Aug 2012 05:23:14 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: vbs/hta: обмен "клиента" к "серверу", работающими под разными учетками]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=63274#p63274</link>
			<description><![CDATA[<p><strong>Rom5</strong>, использование реестра для этого — не лучшая идея. Лучше отслеживайте через файл.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Wed, 29 Aug 2012 05:23:14 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=63274#p63274</guid>
		</item>
		<item>
			<title><![CDATA[Re: vbs/hta: обмен "клиента" к "серверу", работающими под разными учетками]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=63273#p63273</link>
			<description><![CDATA[<div class="quotebox"><cite>Rom5 пишет:</cite><blockquote><p>Есть желание приложением, работающим под ограниченной учеткой, запустить новый процесс от имени приложения уже работающего под админской учеткой (работа на одной машине).<br />[..]<br />В теме коллекции <a href="http://forum.script-coding.com/viewtopic.php?id=1648">WSH &amp; HTA: обмен данными между скрипт-процессами</a> есть много интересого, но не хотелось бы регистрировать дополнительные библиотеки, поэтому рассматриваю вариант обмена через содержимое файла: клиент создает файл с записью аргументов, а сервер - ждет изменений файла, читает и удаляет файл и исполняет требуемое. <br />Как вариат - дать ограниченной учетке право на изменение некоего ключа в HKLM реестра машины и обмен вести через реестр.</p></blockquote></div><p>Разрешилась идея таки через реестр. С сокетами - не хватило ума доработать коллекционный пример, чтобы сервер слушал не один посыл от клиента(, да и регистрировать надо библиотеку. С мониторингом появления файла в папке - некая тормознутость имеется, а вот с отслеживанием изменения параметра в реестре - все очень оперативно.</p><p>Для возможности отслеживания параметра в ключе реестра надо чтобы этот ключ существовал (в моем случае - hklm\SOFTWARE\IE_CompAction), а чтобы пользователь мог в него писать - пользователям машины надо выдать права. Для этого сделал &quot;сетапный&quot; батник:<br /></p><div class="codebox"><pre><code>@Echo ____Create-n-Permission [Users]___
reg add HKEY_LOCAL_MACHINE\SOFTWARE\IE_CompAction 
subinacl.exe /keyreg &quot;HKEY_LOCAL_MACHINE\SOFTWARE\IE_CompAction&quot; /grant=&quot;builtin\users&quot;=f
@Echo.
@Pause</code></pre></div><p>Сам скрипт запускаемый от админской учетки:<br /></p><div class="codebox"><pre><code>&#039; ----- monitorReg--start.vbs
&#039; Скрипт должен быть стартован от имени административной учетки.
&#039; Скрипт следит в реестре за изменением значения параметра HKLM\SOFTWARE\IE_CompAction\DT_created и, если значение
&#039; изменилоось, то считывается и запускается на выполнение значение HKLM\SOFTWARE\IE_CompAction\start_cmd

Dim oShell
Set oShell = WScript.CreateObject(&quot;WScript.Shell&quot;) 
Dim fso
Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;)
Dim gsPathApp
gsPathApp = fso.GetAbsolutePathName(&quot;.&quot;) &amp; &quot;\&quot; &#039;путь к каталогу запуска задачи&#039;

Dim gsTitle : gsTitle = &quot;Script `monitorReg--start.vbs`&quot; &#039;для заголовка диалоговых окон&#039;

&#039;&#039;&#039;&#039; ---- from http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/registry/
Set wmiServices = GetObject(&quot;winmgmts:root/default&quot;)
Set wmiSink = WScript.CreateObject(&quot;WbemScripting.SWbemSink&quot;, &quot;SINK_&quot;) 

wmiServices.ExecNotificationQueryAsync wmiSink, _ 
  &quot;SELECT * FROM RegistryValueChangeEvent WHERE Hive=&#039;HKEY_LOCAL_MACHINE&#039;&quot; &amp; _
  &quot; AND KeyPath=&#039;SOFTWARE\\IE_CompAction&#039;&quot; &amp; _
  &quot; AND ValueName=&#039;DT_created&#039;&quot; 
 
MsgBox &quot;Listening for Registry Change Events...&quot; &amp; vbCrLf &amp; vbCrLf &amp; _
	&quot;(To terminate a run &#039;monitorReg--stop.vbs&#039;)&quot;,vbInformation,gsTitle

While(1) 
    WScript.Sleep 1000 
Wend 
 
&#039;--- обработка события изменения параметра реестра&#039;
Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext) 
	readCmd = oShell.RegRead(&quot;HKEY_LOCAL_MACHINE\SOFTWARE\IE_CompAction\start_cmd&quot;)
	If Len(readCmd)=0 Then
		&#039;--- считан пустой параметр
		MsgBox &quot;Через реестр передана пустая командная строка&quot;,vbExclamation,gsTitle
	Else
		If readCmd&lt;&gt;&quot;stop&quot; Then
			&#039; создаем в каталоге задачи временный батник для запуска через него полученной строки&#039;
			sRunFile = gsPathApp &amp; &quot;last_start.cmd&quot;
			Set fspo=FSO.OpenTextFile(sRunFile, 2, True)
			fspo.WriteLine readCmd
			fspo.Close
			Set fspo = Nothing
			&#039;&#039;
			oShell.Run sRunFile
		Else
			&#039;--- предлагаем закрыть скрипт&#039;
			If MsgBox(&quot;Остановить скрипт мониторинга реестра ?&quot;,vbQuestion+vbYesNo,gsTitle)=vbYes Then 
				MsgBox &quot;Stopped Listening registry changes.&quot;,vbExclamation,gsTitle
				WScript.Quit
			End IF
		End IF
	End IF
End Sub</code></pre></div><p>Если вдруг надо остановить слежение за реестром, запускаю уже от обычной учетки скрипт:<br /></p><div class="codebox"><pre><code>
&#039; ----- monitorReg--stop.vbs
&#039; Скрипт предназначен для инициации останова скрипта слежения за реестром &quot;monitorReg--start.vbs&quot;.
&#039; Скрипт измененят параметра HKLM\SOFTWARE\IE_CompAction\DT_created для срабатывания &quot;monitorReg--start.vbs&quot;
&#039; и пишет значение &quot;stop&quot; в параметр HKLM\SOFTWARE\IE_CompAction\start_cmd


Dim oShell
Set oShell = WScript.CreateObject(&quot;WScript.Shell&quot;) 

oShell.RegWrite &quot;HKEY_LOCAL_MACHINE\SOFTWARE\IE_CompAction\start_cmd&quot;, &quot;stop&quot;, &quot;REG_SZ&quot;
oShell.RegWrite &quot;HKEY_LOCAL_MACHINE\SOFTWARE\IE_CompAction\DT_created&quot;, Now(), &quot;REG_SZ&quot;</code></pre></div><p>Передаваемая реестром команда старта приложения в моем случае выглядит в виде строки<br /></p><div class="codebox"><pre><code>start  &quot;&quot; /D&quot;каталог задачи&quot; приложение.hta учетка_машины/пользователя</code></pre></div><p>поэтому скрипт из реестра сначала выгружает командную строку во временный батник и запускает уже его.</p><p>Запись в реестр команды с параметрами и признака старта (текущее время) у меня выполняется уже из нескольких приложений, работающих под ограниченной учеткой&nbsp; - это страничка контекстного меню броузера в Наумен и макрос из эксельной таблицы со списком пользователей, которые в данный момент на тех/поддержке.</p><p>Взять пример приложения передачи в реестр параметров из броузера можно на проекте - <a href="http://code.google.com/p/small-scripts/source/browse/IE_CompAction">small-scripts..IE_CompAction</a>. Может кому-то пригодится.</p>]]></description>
			<author><![CDATA[null@example.com (Rom5)]]></author>
			<pubDate>Wed, 29 Aug 2012 05:10:53 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=63273#p63273</guid>
		</item>
		<item>
			<title><![CDATA[vbs/hta: обмен "клиента" к "серверу", работающими под разными учетками]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=62734#p62734</link>
			<description><![CDATA[<p>Есть желание приложением, работающим под ограниченной учеткой, запустить новый процесс от имени приложения уже работающего под админской учеткой (работа на одной машине).</p><p>Поясню желание: есть открытая под &quot;обычной&quot; учеткой веб-страничка Naumen Service Desk, в контекстное меню броузера IE добавляется свой пункт запуска приложения для выполнения неких действий с выделенными на страничке именем машины или учеткой пользователя, но<br />запускать это приложение нужно от имени другой учетки.</p><p>Т.к. и так &quot;по сто раз на дню&quot; набираешь логин-пароль своей админской учетки, то добавлять к этому еще 100 раз ввода хотя бы лишь одного пароля для запуска приложения на своей же машине - нет желания. Хранить где-то пароль админки для авт.использования - неправильно</p><p>Возникла идея: запустить утром через &quot;Run as..&quot; от имени админки некий серверный скрипт, который будет слушать появление посылов от клиентов (в моем случае - скриптов, запускаемых из контекстного меню броузера) и при появлении таких команд уже от имени своей учетки будет стартовать приложение админской работы согласно полученных в &quot;посыле&quot; аргументов.</p><p><em>Прошу подсказать идею обмена данными между клиентом ограниченной учетки и сервером админской.</em></p><p>В теме коллекции <a href="http://forum.script-coding.com/viewtopic.php?id=1648">WSH &amp; HTA: обмен данными между скрипт-процессами</a> есть много интересого, но не хотелось бы регистрировать дополнительные библиотеки, поэтому рассматриваю вариант обмена через содержимое файла: клиент создает файл с записью аргументов, а сервер - ждет изменений файла, читает и удаляет файл и исполняет требуемое. </p><p>Как вариат - дать ограниченной учетке право на изменение некоего ключа в HKLM реестра машины и обмен вести через реестр.</p><p>Подскажите плз еще идею на подобную тематику.</p>]]></description>
			<author><![CDATA[null@example.com (Rom5)]]></author>
			<pubDate>Tue, 14 Aug 2012 05:14:35 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=62734#p62734</guid>
		</item>
	</channel>
</rss>
