[closed]Запустить .bat-файл не открывая cmd-окна.
А еще расскажите, как бы его поредактировать без текстового редактора...


если твой батник запускает единственную программу, зачем он вообще нужен? юзай ярлык
или WSH
Предложи альтернативный способ запуска интерпретатором Python программы на Python. Программе передаются аргументы. Программа — сервер, портить пользователю жизнь окошками своими не должна.
Я в виндовзе плохо разбираюсь, знаешь — скажи.
Я погуглил нашел только команду start — вроде не то что нужно.
Я в виндовзе плохо разбираюсь, знаешь — скажи.
Я погуглил нашел только команду start — вроде не то что нужно.
Почему бы не воспользоваться теми программами, которые для этого и предназначены?
В Cygwin есть такая.
---
...Я работаю антинаучным аферистом...
В Cygwin есть такая.
---
...Я работаю антинаучным аферистом...
есть такая прожка.
cmdow называется
cmdow называется
сделай ярлык питона и пропиши ему командные параметры
Именно так, при создании ярлыка можно указать параметры (в той же строке, где имя исполняемого файла указывается). Если же в батнике используется что-то продвинутое, то создаем *.vbs файл для запуска батника. Содержимое vbs'а создается примерно такое, как описано здесь.
Я понял про ярлык/shotrcut, я экспериментировал.
Ну так вот: все равно открывается окно.
Может быть оно открывается потому что прога хочет в stdout написать?
Ну так вот: все равно открывается окно.
Может быть оно открывается потому что прога хочет в stdout написать?

Как я понимаю — это тот же .bat с картинкой.
Почему бы не сделать stdout туда, куда надо?
---
...Я работаю антинаучным аферистом...
---
...Я работаю антинаучным аферистом...
pithon.exe tratata pumpum > nul
попробуй, вдруг получится
попробуй, вдруг получится
Это не поправит stderr.
---
"Аллах не ведёт людей неверных."
---
"Аллах не ведёт людей неверных."
stderr и не надо поправлять, полагаю.
Народ, вы чо несете?
Пишете например
Пишете напримерstart java --jar arch.jarи никакого окна не открывается
Неа, не получается 

да, я уже вижу 

Спасибо, читаю.
"start cmd /c echo" --- и откроется.
---
"Расширь своё сознание."
---
"Расширь своё сознание."
А вариант запускать программу сервисом не катит?
Тот же FireDaemon без напряга сделает сервис, который и будет тебе запускать твое питонообразное, при этом естественно никаких окошек вылезать не будет.
Тот же FireDaemon без напряга сделает сервис, который и будет тебе запускать твое питонообразное, при этом естественно никаких окошек вылезать не будет.
Мне не надо Cygwin. Мне надо не "чтоб у меня заработало" а "чтоб заработало у всех пользователей виндовз", а пользователи виндовз cygwin ставить не будут.
Не забудь упомянуть, что юзерские программы, а тем более интерпретаторы, запускаемые от имени Local System, являются огромной брешью в системе.
Сервисы уже давно можно запускать от любого пользователя системы.
а можно использовать экзешники вместо бата? или это некошерно?
+1
Ты же всё равно питон ставить будешь, так?
Что тебе мешает поставить окромя питона ещё и дополнительную примочку?
Последнюю можно смоделировать по образу и подобию той, что из Cygwin.
Или просто поставить цигвиновскую.
---
"У цигвина крылья --- вот тако-ой ширины!"
Что тебе мешает поставить окромя питона ещё и дополнительную примочку?
Последнюю можно смоделировать по образу и подобию той, что из Cygwin.
Или просто поставить цигвиновскую.
---
"У цигвина крылья --- вот тако-ой ширины!"
Кошерно на самом деле. т.е. можно, если научиться автоматически exeшники делать.
Чтоб они были бесплатные, без баннеров, кроссплатформенные (для разных винд). Желательно средствами windows.
Я такого не умею. Попробовал bat2com и com2exe — не работает то что получилось.
Чтоб они были бесплатные, без баннеров, кроссплатформенные (для разных винд). Желательно средствами windows.
Я такого не умею. Попробовал bat2com и com2exe — не работает то что получилось.
Сервисы уже давно можно запускать от любого пользователя системы.Толку маловато: http://www.gentlesecurity.com/04302006.html
Summary
* Network Service account's context is elevated to LocalSystem.
* A context of MS SQL service running as unique user account is elevated up to LocalSystem.
* Any service's context could be elevated to LocalSystem.
Тебя научить патчить бинарники?
---
...Я работаю антинаучным аферистом...
---
...Я работаю антинаучным аферистом...
Че вы гадаете?
вам уже ответили правильно:
вам уже ответили правильно:
Я читаю лицензию.
И там написано только про win-32-bit. Что она сделает с 64-битной?
И там написано только про win-32-bit. Что она сделает с 64-битной?
ХЗ.
Возьми да запусти, в чём проблема-то?
Возьми да запусти, в чём проблема-то?
Проблемы такие:
Лицензии нет, 64-битной винды в окрестности нет.
Лицензии нет, 64-битной винды в окрестности нет.
а чем WSH не устроил?
это же стандартное виндовое средство...
это же стандартное виндовое средство...

На что лицензии нет?
Этой что ли?
Этой что ли?
Cmdow v1.4.3 for Windows NT4/2000/XPА вообще, HG прав, юзай WSH
Copyright (C) 2001-2004 Ritchie Lawrence
http://www.commandline.co.uk
Terms of Use
------------
This software is provided "as is", without any guarantee made as
to its suitability or fitness for any particular use. It may
contain bugs and use of this product is at your own risk. I take
no responsibility for any damage that may be caused through its use.
This product is freeware. There is no fee for personal or
corporate use. It may be freely distributed only in its original
form and provided this text file is attached.
Comments, Problems
------------------
If you have any comments or problems regarding this software,
please feel free to email me. The latest version of this product
may be downloaded from my web site at http://www.commandline.co.uk.
— Ritchie
email: commandline.co.uk
/>
Тем что я не знаю что это такое.
Я разбираюсь с ним сейчас, просто параллельно рассмотрел остальные варианты.
Например, у Python есть pythonw (спасибо _Ss_) — он интерпретатор запускает, если stdout и stderr перенаправить в файл — то все хорошо. Однако ж питон стартует еще программу на другом языке, и вот для нее уже окно появляется...
Я разбираюсь с ним сейчас, просто параллельно рассмотрел остальные варианты.
Например, у Python есть pythonw (спасибо _Ss_) — он интерпретатор запускает, если stdout и stderr перенаправить в файл — то все хорошо. Однако ж питон стартует еще программу на другом языке, и вот для нее уже окно появляется...
там не надо разбираться
создаешь вот такой файл c расширением .vbs:
runpython.vbs
и запускаешь его потом ярлыком "wscript runpython.vbs"
все.
создаешь вот такой файл c расширением .vbs:
runpython.vbs
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "python myprog > log.txt", 0, false
и запускаешь его потом ярлыком "wscript runpython.vbs"
все.
Некошерный log.txt тут появляется. 
В таком виде pythonw.exe тоже умеет.

В таком виде pythonw.exe тоже умеет.
если вывод не нужет тогда напиши не log.txt, а nul...
ну можно ведь не log.txt, a nul
Боюсь, что автору это уже не поможет. Он таки проговорился, что
Т.е. исходная задача, видимо, такая: запуск приложения и всех запускаемых им приложений в скрытом состоянии.
Однако ж питон стартует еще программу на другом языке, и вот для нее уже окно появляется...Для того, чтобы это исправить, нужно либо править код программы (чтобы из него указанная программа запускалась правильно, т.е. запускать с необходимыми ключами / запускать *.vbs, который запустит нужную программу либо запускать ее как службу без возможности взаимодействия с пользователем / на другом десктопе.
Т.е. исходная задача, видимо, такая: запуск приложения и всех запускаемых им приложений в скрытом состоянии.
вроде, здесь когда-то был тред, посвященный перенаправлению stdout'ов всех дочерних процессов куда-нибудь.
Боюсь, что автору это уже не поможет. Он таки проговорился, чтоПомогает pythonw.exe program > log.txt 2>err.txt
Но эта команда правильно работает из командной строки. Не подымает лишних окон. (и про непитонью прогу тож не поднимает).
Остается вопрос как shortcut'ом запустить такую команду. Если эту же команду написать в shortcut->target — не работает.
запуск приложения и всех запускаемых им приложений в скрытом состоянии.в общем случае не рализуется, потому как процесс может легко создать новую консоль, если захочет.
vbs не блокирует создание консоли, а просто скрывает ее. Так что все, кому нужен stdout/stderr будут срать в невидимую консоль и не будут мешать. Так что скоррее всего автору это поможет.
Иначе - только сервис...
http://forum.kaspersky.com/index.php?showtopic=9975&mode...
не думаю что пользователь обрадуется использованию такой штуки.
не думаю что пользователь обрадуется использованию такой штуки.
> Иначе - только сервис...
как минимум - еще runas есть
как минимум - еще runas есть
еще пользователя без прав доступа к интерфейсу создавать?
а если запускаемой проге прав не хватит?
а если запускаемой проге прав не хватит?
Иначе - только сервисМожно сделать запуск сервиса каким-нибудь запускабельным файлом, и сделать его через start->all programs->...?
Я умею делать сервисы, запускающиеся при старте винды. Ну или руками в services их запускать-останавливать.
shortcut с net start <program> — тоже показывает окно.
ошибся, runas делать не умеет, то что я имел ввиду.
> еще пользователя без прав доступа к интерфейсу создавать?
нет, достаточно просто запустить программу под другой сессией (например, так делает scheduler, если указан пользователь, отличный от залогиненного)
> еще пользователя без прав доступа к интерфейсу создавать?
нет, достаточно просто запустить программу под другой сессией (например, так делает scheduler, если указан пользователь, отличный от залогиненного)
можно, и даже просто.
могу привести код на плюсплюсе
Который при запуске будет открывать окно? 

который будет запускать зарегистрированные, но мануальностартуемые процессы. Наличие окна зависит исключительно от того, хочешь ли ты его выводить.
Помогает pythonw.exe program > log.txt 2>err.txtВ ярлыке вроде бы нельзя делать такие перенаправления.
Все таки, лучше вопользуйтесь WSH, уже писал код. И даже действия необходимые писал (создать *.vbs файл и создать ярлык для wscript <file>).
Блин, программа на C с одной инструкцией CreateProcess, запускающая батник в нулевом окне будет занимать максимум двадцать строк.
а в bvscripts 2 строки 

Спасибо всем, решил с помощью wsh.
Отдельное спасибо и .
Отдельное спасибо и .
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "python myprog > log.txt", 0, false Кто-нибудь может рассказать как вместо myprog вставить Program Files\prog\myprog?
В "Program Files" же пробел есть.
Или дать ссылку на нормальный учебник по синтаксису. Погугливание ничего не дало

М-да…
Вариант 1: progra~1\prog\myprog
Вариант 2: "python ""Program Files\prog\myprog"" > log.txt"
А туда не указывает какая-нибудь переменная окружения?
На "Program Files", в смысле.
Может, есть какой-нибудь аналог execv(3) или execl(3)?
---
...Я работаю антинаучным аферистом...
На "Program Files", в смысле.
Может, есть какой-нибудь аналог execv(3) или execl(3)?
---
...Я работаю антинаучным аферистом...
Win2k3sp1-StdandartEdition
E:\>set ProgramFiles
ProgramFiles=C:\Program Files
на XP тоже есть, но не это надо автору.
он знает, где лежит этот файл, ему надо было просто написать путь с пробелами
он знает, где лежит этот файл, ему надо было просто написать путь с пробелами
Goolgle отстой, Яndex рулит
- http://www.yandex.ru/yandsearch?rpt=rad&text=%EC%E5%F2%E... (первая ссылка выдает нужный ответ)
- http://www.yandex.ru/yandsearch?rpt=rad&text=%EC%E5%F2%E... (первая ссылка выдает нужный ответ)Метод WScript.Run использую для того, чтобы из VBA.Excel открывать файлы других приложений. Интересная особенность - если строка пути или имени файла содержит пробелы, то метод отказывается работать.То есть те надо
Что делать?
------------------
Сам разобрался! Могу пояснить, о чем хотя бы речь-то шла! Скорее всего, я неясно выразил свою мысль...
WScript - это ~ http://msdn.microsoft.com/library/default.asp?url=/library/e... ~
Объект Wscript имеет метод .Run - я его использую для того, чтобы из Excel открывать документы и файлы, связанные с какими-либо приложениями, например, файлы *.doc, *.psd, *.mp3, *. .....
Так вот, оказывается, что для правильной работы Wscript.Run, нужно делать не так:
Код:
Call WshScript.Run("C:\Documents and Settings\UserName\Мои документы\MyVBA\Excel\d.mp3", 4, False)
А вот так:
Код:
Call WshScript.Run(Chr(34) & "C:\Documents and Settings\UserName\Мои документы\MyVBA\Excel\d.mp3" & Chr(34 4, False)
p.s.: Пуск / Выполнить - работает аналогично: если в пути или имени файла есть пробелы, то без " не обойтись.........
objShell.Run Chr(34) & "C:\Program Files\bla-bla-bla" & Chr(34), bla-bla
он знает, где лежит этот файл, ему надо было просто написать путь с пробеламиДа, я просто не в курсе на каком языке написаны эти .vbs и искал wsh.
В итоге я знаю что wsh безмерно крут и всех рвет-порвет, но что это — до сих пор непонятно.
Я за виндовсом года 2-3 уж не сидел, а проги так вообще никогда не писал.
Но ничего, с сегодняшнего дня еще и Mac будет

ой бля!
один дурак напишет и все вместо того чтобы доку почитать за ним повторяют...
вон выше уже написал правльный ответ.
один дурак напишет и все вместо того чтобы доку почитать за ним повторяют...
вон выше уже написал правльный ответ.
на каком языке написаны эти .vbsvbs = VBScript = Visual Basic Script
wsh - это стандарт+API для скриптовых интерпретаторов.
в комплект винды входят 2 wsh-ных интерпертатора: JScript (.js) и VBScript (.vbs). Но ничто не мешает добавить туда свой. Возможно что они уже есть где-нибудь для скачивания.
запускаются все wsh-ные скрипты одинаково:
wscript <scriptfile>
для скриптов с графич. интерфейсом или без интерфейса.
либо
cscript <scriptfile>
для скриптов с консольным интерфейсом.
в комплект винды входят 2 wsh-ных интерпертатора: JScript (.js) и VBScript (.vbs). Но ничто не мешает добавить туда свой. Возможно что они уже есть где-нибудь для скачивания.
запускаются все wsh-ные скрипты одинаково:
wscript <scriptfile>
для скриптов с графич. интерфейсом или без интерфейса.
либо
cscript <scriptfile>
для скриптов с консольным интерфейсом.
Извиняюсь за некрофилизм, но вы этот артикл вообще потрудились прочитать? =)
Информация интересна конечно, но тем не менее.
Поясню на всякий случай.
Там предлагается следующее.
Стырить у пользователя его логин/пароль, и с помощью имперсонейта получить консольку с его правами.
Чтоб реализовать это придется:
1. Убить сервис. Ну, если мы заюзали дыру в сервисе, то с правами этого сервиса мы как-нибудь с этим справимся. Никаких изысков.
2. Написать прогу, в идеале делающую то же самое, что и убитый сервис. На худой конец - общающуюся так же с клиентами до момента имперсонейта. Тип: можно юзайть пайпы.
3. Ждать, пока в нашу подставу залогинится кто то с крутыми правами.
Хочу заметить, что подобным способом можно пользоваться в любой оси.
Этот способ позволяет банально тырить пароли людей, использующих скомпрометированный сервис. А АПИ запуска программ с другими правами есть в любой оси.
И я даже уже не хочу говорить, что право имперсонейтить клиента для отдельного сервиса почти наверняка можно снять.
В общем, это не является какой то там мега дырой, которая по взмаху волшебной палочки дает вам елевейт прав. Это банальное следствие того, что взломав сервис, вы получаете доступ ко всей инфе, которой этот сервис обладает.
И если он обладает паролем админа, то наверное сами понимаете, на какой бы оси этот сервис не крутился, надо будет сильно потрудиться, чтобы хакер с этим паролем админа не нашел куда бы сунуться.
Так что заявление, что виндовозные сервисы суть "одна большая дыра", основанное на этом артикле, выглядит, мягко говоря, необоснованным.
ЗЫ Предупреждая какой нить очередной холи вар, скажу, что я не являюсь безоговорочным защитником и почитателем Винды, и сам иногда люблю поставить слакварь в 200 мегов дискового пространства, и потоптать консоль, чтобы запустить там вайном виндовозный сервис.
Но вот мимо таких заявлений мне тяжко проходить молча.
Информация интересна конечно, но тем не менее.
Поясню на всякий случай.
Там предлагается следующее.
Стырить у пользователя его логин/пароль, и с помощью имперсонейта получить консольку с его правами.
Чтоб реализовать это придется:
1. Убить сервис. Ну, если мы заюзали дыру в сервисе, то с правами этого сервиса мы как-нибудь с этим справимся. Никаких изысков.
2. Написать прогу, в идеале делающую то же самое, что и убитый сервис. На худой конец - общающуюся так же с клиентами до момента имперсонейта. Тип: можно юзайть пайпы.
3. Ждать, пока в нашу подставу залогинится кто то с крутыми правами.
Хочу заметить, что подобным способом можно пользоваться в любой оси.
Этот способ позволяет банально тырить пароли людей, использующих скомпрометированный сервис. А АПИ запуска программ с другими правами есть в любой оси.
И я даже уже не хочу говорить, что право имперсонейтить клиента для отдельного сервиса почти наверняка можно снять.
В общем, это не является какой то там мега дырой, которая по взмаху волшебной палочки дает вам елевейт прав. Это банальное следствие того, что взломав сервис, вы получаете доступ ко всей инфе, которой этот сервис обладает.
И если он обладает паролем админа, то наверное сами понимаете, на какой бы оси этот сервис не крутился, надо будет сильно потрудиться, чтобы хакер с этим паролем админа не нашел куда бы сунуться.
Так что заявление, что виндовозные сервисы суть "одна большая дыра", основанное на этом артикле, выглядит, мягко говоря, необоснованным.
ЗЫ Предупреждая какой нить очередной холи вар, скажу, что я не являюсь безоговорочным защитником и почитателем Винды, и сам иногда люблю поставить слакварь в 200 мегов дискового пространства, и потоптать консоль, чтобы запустить там вайном виндовозный сервис.
Но вот мимо таких заявлений мне тяжко проходить молча.
> 2. Написать прогу, в идеале делающую то же самое, что и убитый сервис. На худой конец - общающуюся так же с клиентами до момента имперсонейта. Тип: можно юзайть пайпы.
Или запустить оригинальный сервис с другим именем и всё ему редиректить.
Или запустить оригинальный сервис с другим именем и всё ему редиректить.
Извиняюсь за некрофилизм, но вы этот артикл вообще потрудились прочитать?Потрудился, но не очень хорошо понял ограничения данного метода эскалации привилегий, так как не знаком с моделью защиты в Windows. Кстати, ты, похоже, разбираешься в этом, не посоветуешь, где можно найти краткое и понятное описание (я не первый раз спрашиваю на форуме, пока почему-то никто не показал).
Хочу заметить, что подобным способом можно пользоваться в любой оси.В некоторых других осях сервису вообще незачем знать пароли клиентов, а также у них нет возможности получать дополнительные привилегии с помощью имперсонирования.
Этот способ позволяет банально тырить пароли людей, использующих скомпрометированный сервис. А АПИ запуска программ с другими правами есть в любой оси.
Потрудился, но не очень хорошо понял ограничения данного метода эскалации привилегий, так как не знаком с моделью защиты в Windows. Кстати, ты, похоже, разбираешься в этом, не посоветуешь, где можно найти краткое и понятное описание (я не первый раз спрашиваю на форуме, пока почему-то никто не показал).
В некоторых других осях сервису вообще незачем знать пароли клиентов, а также у них нет возможности получать дополнительные привилегии с помощью имперсонирования.Мм. Наверно я не очень понятно объяснил.
Это самое имперсонирование как бы является аналогом su. Это такая АПИ функция, которой ты на вход подаешь логин/пароль - и на выходе получаешь эффективные права этого пользователя.
То есть ты можешь имперсонироваться, только если знаешь логин и пароль. И никак иначе. Если ты не знаешь пароля админа, ты не сможешь в него имперсонироваться, даже пускай взломав какой то сервис.
Просто взломанный сервис тебе может предоставить место, где ты потенциально сможешь имперсонироваться.
Соответственно, в артикле и идет речь о том, что допустим у нас есть сервис, к которому подключаются люди и вводят туда логин/пароль виндового пользователя на этом сервере. Что уж там дальше происходит, вобщем то все равно, но обычно поток связанный с этим человеком имперсонируется в введенного пользователя. Например фтп сервер, который юзает пользователей винды в качестве аккаунтов. Или что нибудь АктивДиректорнутое.
Ну и в артикле предлагают хакнуть такой сервис, написать для него обертку, подождать пока в сервис залогинится чуве с большими правами, таким образом стырить введеные им логин/пароль, и, грубо говоря, сделать туда su. Но, называя это красивым словом имперсонировать.
Причем, в винде вагон и тележка сервисов, в которые никто никогда не вводит пароли админа. Более того, их подавляющее большинство. И никаких дополнительных прав имперсонированием никто никогда не получит, хоть перетрейсив этот сервис вдоль и поперек.
Теперь вернемся к теме топика. Единственная дыра, которую дает питоновская программа, запущенная как сервис - следующая. Если кто то узнает логин/пароль администратора, то взломав этот сервис, он вероятно сможет получить админскую консольку, даже если на сервере не запущен какой нить ремоут десктоп сервер, или что то подобное.
Вероятно - потому что еще надо будет суметь через этот сервис умудриться подменить екзешник этого сервиса, но это уже детали.
Вобщем, получается своеобразный инъект логин скрина.
Ну и кроме того, как я уже говорил, это право имперсонейтиться вроде можно снять для отдельного пользователя, так что имхо создаете пользователя, лишаете его прав имперсонизации, пускаете под ним сервис, и потенциальная дырочка пропадает. Утверждать точно не буду, но вроде можно.
Вроде бы доступно объяснил. Поправьте если что.
Ну и кроме того, как я уже говорил, это право имперсонейтиться вроде можно снять для отдельного пользователя, так что имхо создаете пользователя, лишаете его прав имперсонизации, пускаете под ним сервис, и потенциальная дырочка пропадает. Утверждать точно не буду, но вроде можно.Судя по тому что пишут на Microsoft.com и по тому, что я вижу на своей Win2003 (член домена право "Impersonate a client after authentication" по умолчанию дано только группам Administrators и Service.
Оставить комментарий
pilot
В виндузе:Есть .bat-файл, который запускает программу (python.exe [args]).
Хочется запускать программу из Start->All programs->...->ProgramName так, чтобы не выезжало окна запуска .bat-файла (там сервер стартует не надо чтобы пользователь окно видел.
Ну и просто в Explorere 2 раза кликаем на файл — чтоб cmd-окна не появлялось.
Как это сделать?