Web и реестр
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        


12»»

Web и реестр Expand / Collapse
Автор
Сообщение
25.01.2006 20:49
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 06.03.2007 16:42
Сообщ.: 332, Visits: 3 576
Добрый вечер уважаемые.

Интересует следующее :
есть ли возможность взаимодействия реестра с серверными языками, скриптами ?

Например, мне нужно при нажатии на 'button' записать инфу в реестр и чтобы никаких окон не выводилось и ничего не показывалось. Доступ к реестру есть.

В какую сторону следует копать ???

Спасибо.
Сообщ. #889480
26.01.2006 10:20
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Возможность чтения/записи в реестр есть. В разных языках это реализуется по разному. Поэтому уточни вопрос - в каком языке ты это хочешь делать?
Сообщ. #889508
27.01.2006 16:30
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 06.03.2007 16:42
Сообщ.: 332, Visits: 3 576
Привет.

Нужно делать на ASP+VBS.

Пробовал делать вот что (пока на JS):

<%
var WSHShell = Server.CreateObject("WScript.Shell");
WSHShell.Run(Server.MapPath("test2.js"),5);
%>

где nest2.js (даже не работа с реестром) :

var vbOKCancel = 1;
var vbInformation = 64;
var vbCancel = 2;
var Message = "Вы действительно хотите запустить программу Notepad?";
var Title = "Подтвердите действие";
Welcome();

var WSHShell = WScript.CreateObject("WScript.Shell");
WSHShell.Run("notepad",5);

function Welcome() {
var WSHShell = WScript.CreateObject("WScript.Shell");
var intDoIt;
intDoIt = WSHShell.Popup(Message,
0,
Title,
vbOKCancel + vbInformation );
if (intDoIt == vbCancel) {
WScript.Quit();
}
}


Ничего не пашет. Во время загрузки страницы просто в винде издается звук и все.
Если просто из винды запускаю файл test2.js - все работает ...

Других способов я не нашел.

С реестром тоже самое : есть файл reg.js


var WSHShell = WScript.CreateObject("WScript.Shell");
WSHShell.RegWrite("HKCU\\MyRegKey\\", "Primer");
WSHShell.RegWrite("HKCU\\MyRegKey\\String", 1);
WSHShell.Popup("Создаем параметр DWORD");
WSHShell.RegWrite("HKCU\\MyRegKey\\DWORD", 2, "REG_DWORD");
WSHShell.RegWrite("HKCU\\MyRegKey\\Binary", 3, "REG_BINARY");


Если его запускаю из винды, то все работает, а вот если из asp- страницы :

<%
var WSHShell = Server.CreateObject("WScript.Shell");
WSHShell.Run(Server.MapPath("reg.js"),5);
%>


Не работает и опять же издается звук в винде ...

Что не так я делаю ? И какие способы у Вас Василий ?

Спасибо.
Сообщ. #889631
27.01.2006 18:19
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Проблема скорее всего в правах на запись в реестр. Учетная запись от имени которой работает ASP не имеет возможности писать в корень раздела HKCU. Создай отдельный ключ и выдай на него права учетной записи IUSR_имяКомпа.

Кроме того ты зря пользуешься WSHShell.Run - лучше использовать Server.Execute или просто вызов функции. Непонятно зачем ты так усложняешь код.

И, наконец, бессмысленно пытаться вызывать диалоги из ASP - клиент их никогда не увидит. Не забывай что ASP на сервере выполняется и вызов WSHShell.Popup будет пытаться отобразить диалог на сервере, а не у клиента. Но и это у него не получится так как сервис IIS не имеет прав создавать окна на рабочем столе.
Сообщ. #889641
28.01.2006 1:33
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 06.03.2007 16:42
Сообщ.: 332, Visits: 3 576
Доброй ночи.

Дело в том, что мне вставить нужно инфу (на сороне клиента) в HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings.

> Создай отдельный ключ и выдай на него права учетной записи IUSR_имяКомпа.

Что за ключ, и где выдать права ?

> Кроме того ты зря пользуешься WSHShell.Run - лучше использовать Server.Execute или просто вызов функции. Непонятно зачем ты так усложняешь код.

Это был как пример работы WSH. Просто другого способа я не нашел. А Вы так и не ответили на вопрос, т.к сказали что у Вас есть ваприанты ...

>И, наконец, бессмысленно пытаться вызывать диалоги из ASP - клиент их никогда не увидит. Не забывай что ASP на сервере выполняется и вызов WSHShell.Popup будет пытаться отобразить диалог на сервере, а не у клиента. Но и это у него не получится так как сервис IIS не имеет прав создавать окна на рабочем столе.


Согласен, но я привел лишь пример, который работает с реестром ...


Поэтому вопрос остается в силе ....


Спасибо.
Сообщ. #889659
30.01.2006 13:30
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Раз тебе нужно работать с реестром на стороне клиента, то серверные технологии здесь никакой роли не играют. То что я писал относилось к случаю работы с реестром на стороне сервера.

Для работы с реестром на стороке клиента достаточно написать такой код
<script language="javascript">
var WSHShell = new ActiveXObject("WScript.Shell");
WSHShell.RegWrite("HKCU\\MyRegKey\\", "Primer");
WSHShell.RegWrite("HKCU\\MyRegKey\\String", 1);
WSHShell.Popup("Создаем параметр DWORD");
WSHShell.RegWrite("HKCU\\MyRegKey\\DWORD", 2, "REG_DWORD");
WSHShell.RegWrite("HKCU\\MyRegKey\\Binary", 3, "REG_BINARY");
</script>

Но тут начинаются проблемы с правами на выполнение ActiveX. Чтобы этот код выполнился сайт должен находиться в зоне Trusted Sites причем пользователю будет задан вопрос разрешает ли он запуск потенциально небезопасного скрипта. Обойти его нельзя (официально во всяком случае), возможно есть какие-то уязвимости в IE позволяющие это сделать, но это неправильный путь.

Как вариант можно сделать js файл с вышеуказанным кодом, сделать на него ссылку и попросить пользователя выбрать команду "open" для запуска файла. Или написать hta файл и опять же попросить пользователя выполнить его.

Кстати, что именно ты хочешь поменять в настройках браузера? И для каких компьютеров? Если это нужно сделать в локальной сети, то существуют цивилизованные способы в виде групповой политики или WMI.
Сообщ. #889737
30.01.2006 22:49
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 06.03.2007 16:42
Сообщ.: 332, Visits: 3 576
Чтобы исправить вот эту ошибку :
http://support.microsoft.com/default.aspx?scid=kb;en-us;181050

Нужно добавить в реестр параметр, иначе не будет работать синхронизация из-за таймаута.

Поэтому я и спросил, как это сделать через веб, потому как просто запускать файлик *.reg юзеры не будут. Поэтому нужно добавить этот параметр без их участия ...

Вот в чем вопрос ...
Сообщ. #889778
31.01.2006 11:02
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Я тебе уже привел варинты решения - ссылка на js файл или hta файл. Но в любом случае тебе потребуется участие пользователя в этом процессе. Если бы веб приложение могло менять реестр без участия пользователя, то это была бы очень большая дыра.

И если компьютеры, на которых надо поменять эту настройку, находятся в локальной сети и включены в домен, то лучше пользоваться групповой политикой или login скриптом (то есть без участия веб).
Сообщ. #889792