Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #51 (permalink)  
Старый 13.03.2013, 17:02
Интересующийся
Отправить личное сообщение для kosmonavtom Посмотреть профиль Найти все сообщения от kosmonavtom
 
Регистрация: 07.03.2013
Сообщений: 27

rgl, внутри скрипта это нужно, чтобы пользователь щелкнул на единственный файл, а не запускал лишние консоли и прочее. И я думаю он не будет большее количество раз выполняться ведь именно для этого там и стоит if ...
Ответить с цитированием
  #52 (permalink)  
Старый 13.03.2013, 17:10
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

kosmonavtom, а почему и именно скриптовый язык, почему бы не воспользоваться тем же C# он не на много сложнее, проблема в размере файла?
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #53 (permalink)  
Старый 13.03.2013, 17:13
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

kosmonavtom,
Смотрите мое поправленное предыдущее сообщение

cyber,
этот язык уже есть, есть всегда и у всех (под Windows, разумеется) а всякие там C#, перлы и питоны нужно устанавливать, что не всегда хочется, и не всегда возможно.
Ответить с цитированием
  #54 (permalink)  
Старый 13.03.2013, 17:17
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Сообщение от kosmonavtom Посмотреть сообщение
rgl, внутри скрипта это нужно, чтобы пользователь щелкнул на единственный файл, а не запускал лишние консоли и прочее. И я думаю он не будет большее количество раз выполняться ведь именно для этого там и стоит if ...
что будет выполняться внутри, это уже отдельный вопрос, но запускает себя он до всяких проверок, и так легко можно получить бесконечную цепочку самозапусков
Ответить с цитированием
  #55 (permalink)  
Старый 13.03.2013, 17:50
Интересующийся
Отправить личное сообщение для kosmonavtom Посмотреть профиль Найти все сообщения от kosmonavtom
 
Регистрация: 07.03.2013
Сообщений: 27

rgl, спасибо за новое условие - не знал раньше о таких вещах. А вот код в итоге работает еще и без моего условия и без повторного перезапуска, а просто с двумя строками вначале следующего вида:
var wsh = new ActiveXObject("WScript.Shell");
var cmd = wsh.Exec("cmd /c cscript //H:cscript"); // Перенастройка системы на консольный режим работы

и это я так понимаю самое простое решение для моей рекурсии. Но твое условие я все же думаю оставить в коде т.к. мало ли будут пользователи у которых не успеет консольный режим включиться.

Конечный вариант пока посмотрю на всех машинах, а потом выложу в тему.

Последний раз редактировалось kosmonavtom, 13.03.2013 в 17:56.
Ответить с цитированием
  #56 (permalink)  
Старый 13.03.2013, 18:07
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Сообщение от kosmonavtom Посмотреть сообщение
rgl, спасибо за новое условие - не знал раньше о таких вещах.
Все очень просто, на порядок проще чем объекты html-ного документа, но только если знать, где брать информацию. Всезнающий гугл тут не сильно помогает.

Сообщение от kosmonavtom Посмотреть сообщение
А вот код в итоге работает еще и без моего условия и без повторного перезапуска, а просто с двумя строками вначале следующего вида:
var wsh = new ActiveXObject("WScript.Shell");
var cmd = wsh.Exec("cmd /c cscript //H:cscript"); // Перенастройка системы на консольный режим работы
cscript //H:cscript во-первых, не дает 100% гарантии. У пользователя может просто не хватать прав. А во-вторых, если можно ничего не менять на компьютере пользователя, то лучше не менять, мало ли где еще это может использоваться.

Да, и в моем варианте лучше чуть-чуть подправить:
if( ! /cscript\.exe$/i.test( WScript.FullName ) ) { // проверить что запущено в консольном режиме
(Добавить буковку i, чтобы было нечувствительно к регистру)

Последний раз редактировалось rgl, 13.03.2013 в 18:16.
Ответить с цитированием
  #57 (permalink)  
Старый 13.03.2013, 18:17
Интересующийся
Отправить личное сообщение для kosmonavtom Посмотреть профиль Найти все сообщения от kosmonavtom
 
Регистрация: 07.03.2013
Сообщений: 27

rgl,
Цитата:
cscript //H:cscript во-первых, не дает 100% гарантии. У пользователя может просто не хватать прав. А во-вторых, если можно ничего не менять на компьютере пользователя, то лучше не менять, мало ли где еще это может использоваться.
я тоже думал о том, что лучше ничего не менять в настройках, но надо сказать что на 7-ке у ограниченного правами пользователя все нормально меняется! Ну ладно погоняю пока этот код, а потом примем решение...
Ответить с цитированием
  #58 (permalink)  
Старый 18.03.2013, 18:06
Интересующийся
Отправить личное сообщение для kosmonavtom Посмотреть профиль Найти все сообщения от kosmonavtom
 
Регистрация: 07.03.2013
Сообщений: 27

В процессе эксплуатации возникла новая фишка. Теперь оказалось, что если рекурсия натыкается на папку к которой у пользователя нет доступа, то он вылетает. Для исправления ситуации и продолжения работы скрипта, не глядя на эту папку, я решил добавить условие вида: if (path.StdErr == 0) - оно там есть в скрипте ниже. Но после этого скрипт виснет и жрет 50% ЦП!!! Я что, не правильно записал проверку ошибок?
//var wsh = new ActiveXObject("WScript.Shell");
//if( ! /cscript\.exe$/.test( WScript.FullName ) ) {  // проверить что запущено в консольном режиме
//  wsh.Run("cmd /c cscript " + WScript.ScriptName ); // если нет, перезапустить в консоли
//  WScript.Quit(0); // и завершить текущую инкарнацию (пусть работает перезапущенный в консоли)
//}
	
// 1 Взято но не рабочее с сайта: [url]http://forum.oszone.net/nextnewesttothread-199998.html[/url]
// 2объект файловой системы
var fso = new ActiveXObject("Scripting.FileSystemObject"); 
// 4 путь к каталогу, откуда запускается скрипт
var path = WScript.ScriptFullName.substr(0, (WScript.ScriptFullName.length - WScript.ScriptName.length)),  
	p = fso.GetFolder(path);

var vsePapki = [];  //Массив записей путей ко всем подпапкам.
var nomerProverki=0; //Количество провереных и обработанных папок.
var nomerZapisi=1;  // Количество записанных папок в массив.

//12 Вызываем рекурсивную функцию
sFolders(path);


//14 Рекурсивная функция перебора всех папок и подпапок
function sFolders(folder)//полный путь
{	
	// 17 доступ к объекту-папке
	var root = fso.GetFolder(folder);
	// 19 Коллекция подпапок
	var sfCount = root.SubFolders.Count;
	// 21 последовательность подпапок
	var seq = new Enumerator(root.SubFolders);
	// WScript.Echo("\nКоличество подпапок в корневой папке (" + root + ") = " + sfCount);
        // 24 если в текущей папке есть подпапки, то вызываем функцию для каждой подпапки рекурсивно.
	while (sfCount>0)
	{
		for(; !seq.atEnd(); seq.moveNext())
		{
			// WScript.Echo("Путь к подпапке = " + seq.item().path);
			vsePapki[nomerZapisi] = seq.item().path;
			nomerZapisi=nomerZapisi+1; // Количество записей в массиве адресов
		}
		
		if (path.StdErr == 0) // КАК проверить будет ли ошибка у этой папки????		
		{
			nomerProverki=nomerProverki+1;
		
			WScript.Echo("Номер проверки = " + nomerProverki +  "          Номер записи = " + [nomerZapisi-1]);
		
			if (nomerProverki>=nomerZapisi)
			{
				sfCount = 0;
			}
			else
			{
			 
			
				WScript.Echo("ПАПКА НА ПРОВЕРКУ = " + vsePapki[nomerProverki]);
				sfCount = sfCount - 1;
				sFolders(vsePapki[nomerProverki]);
			
			}
		}
	
	}
 
}
WScript.Sleep(99000);
Ответить с цитированием
  #59 (permalink)  
Старый 18.03.2013, 18:28
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Сообщение от kosmonavtom Посмотреть сообщение
if (path.StdErr == 0) // КАК проверить будет ли ошибка у этой папки????
Что вы хотите этим проверить? Что такое path? Кажется, это строковая переменная (глобальная), она, во-первых, никак не связана с проверяемой сейчас папкой, а все время постоянна, а во-вторых, у нее нет свойства StdErr
Ответить с цитированием
  #60 (permalink)  
Старый 19.03.2013, 10:13
Интересующийся
Отправить личное сообщение для kosmonavtom Посмотреть профиль Найти все сообщения от kosmonavtom
 
Регистрация: 07.03.2013
Сообщений: 27

rgl, спасибо. Значит я так понял что мне нужно:
1) Поставить строку проверки читабельности папки между 37 и 38 т.к. например системную папку лучше и не записывать в массив записанных адресов тогда вообще.
2) Проверять seq.item().path - но не получается, может не правильно указываю свойства?! Ввести вместо vsePapki[nomerZapisi] еще одну переменную и у нее свойства проверить?! - выберу когда свойства папок найду.
3) И проверить системная ли эта папка? или же есть ли у пользователя к ней доступ? - что-то вроде этого.
Только как? Ладно будем искать... но пока погуглю свойства папки наверно.

Последний раз редактировалось kosmonavtom, 19.03.2013 в 10:38.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывод значения функции через равный интервал cOAPerator Общие вопросы Javascript 43 31.12.2012 03:54
Скрипты отправка сообщений между пользователями, скрипт вывод текста на страницу.... Rapala Элементы интерфейса 2 12.01.2011 17:27
arguments вызвавшей функции mister_maxim Общие вопросы Javascript 4 12.10.2010 16:21
Динамический вывод текстовых сообщений Артём Тарасов Общие вопросы Javascript 4 19.02.2009 13:36