[closed]Запустить .bat-файл не открывая cmd-окна.
![](/smiles/lam.gif)
![](/smiles/4u.gif)
если твой батник запускает единственную программу, зачем он вообще нужен? юзай ярлык
или WSH
Я в виндовзе плохо разбираюсь, знаешь — скажи.
Я погуглил нашел только команду start — вроде не то что нужно.
В Cygwin есть такая.
---
...Я работаю антинаучным аферистом...
cmdow называется
сделай ярлык питона и пропиши ему командные параметры
Именно так, при создании ярлыка можно указать параметры (в той же строке, где имя исполняемого файла указывается). Если же в батнике используется что-то продвинутое, то создаем *.vbs файл для запуска батника. Содержимое vbs'а создается примерно такое, как описано
Ну так вот: все равно открывается окно.
Может быть оно открывается потому что прога хочет в stdout написать?
![](/images/graemlins/crazy.gif)
Как я понимаю — это тот же .bat с картинкой.
---
...Я работаю антинаучным аферистом...
попробуй, вдруг получится
---
"Аллах не ведёт людей неверных."
stderr и не надо поправлять, полагаю.
![](/images/graemlins/shocked.gif)
start java --jar arch.jarи никакого окна не открывается
![](/images/graemlins/smile.gif)
![](/images/graemlins/frown.gif)
Спасибо, читаю.
---
"Расширь своё сознание."
Тот же FireDaemon без напряга сделает сервис, который и будет тебе запускать твое питонообразное, при этом естественно никаких окошек вылезать не будет.
Мне не надо Cygwin. Мне надо не "чтоб у меня заработало" а "чтоб заработало у всех пользователей виндовз", а пользователи виндовз cygwin ставить не будут.
Не забудь упомянуть, что юзерские программы, а тем более интерпретаторы, запускаемые от имени Local System, являются огромной брешью в системе.
Сервисы уже давно можно запускать от любого пользователя системы.
а можно использовать экзешники вместо бата? или это некошерно?
+1
Что тебе мешает поставить окромя питона ещё и дополнительную примочку?
Последнюю можно смоделировать по образу и подобию той, что из Cygwin.
Или просто поставить цигвиновскую.
---
"У цигвина крылья --- вот тако-ой ширины!"
Чтоб они были бесплатные, без баннеров, кроссплатформенные (для разных винд). Желательно средствами 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-битной?
Возьми да запусти, в чём проблема-то?
Лицензии нет, 64-битной винды в окрестности нет.
это же стандартное виндовое средство...
![](/images/graemlins/confused.gif)
![](/images/graemlins/confused.gif)
Этой что ли?
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 перенаправить в файл — то все хорошо. Однако ж питон стартует еще программу на другом языке, и вот для нее уже окно появляется...
создаешь вот такой файл c расширением .vbs:
runpython.vbs
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "python myprog > log.txt", 0, false
и запускаешь его потом ярлыком "wscript runpython.vbs"
все.
![](/images/graemlins/smile.gif)
В таком виде 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 есть
а если запускаемой проге прав не хватит?
Иначе - только сервисМожно сделать запуск сервиса каким-нибудь запускабельным файлом, и сделать его через start->all programs->...?
Я умею делать сервисы, запускающиеся при старте винды. Ну или руками в services их запускать-останавливать.
shortcut с net start <program> — тоже показывает окно.
> еще пользователя без прав доступа к интерфейсу создавать?
нет, достаточно просто запустить программу под другой сессией (например, так делает scheduler, если указан пользователь, отличный от залогиненного)
можно, и даже просто.
могу привести код на плюсплюсе
![](/images/graemlins/smile.gif)
который будет запускать зарегистрированные, но мануальностартуемые процессы. Наличие окна зависит исключительно от того, хочешь ли ты его выводить.
Помогает pythonw.exe program > log.txt 2>err.txtВ ярлыке вроде бы нельзя делать такие перенаправления.
Все таки, лучше вопользуйтесь WSH, уже писал код. И даже действия необходимые писал (создать *.vbs файл и создать ярлык для wscript <file>).
Блин, программа на C с одной инструкцией CreateProcess, запускающая батник в нулевом окне будет занимать максимум двадцать строк.
![](/images/graemlins/wink.gif)
Отдельное спасибо и .
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "python myprog > log.txt", 0, false
Кто-нибудь может рассказать как вместо myprog вставить Program Files\prog\myprog?
В "Program Files" же пробел есть.
Или дать ссылку на нормальный учебник по синтаксису. Погугливание ничего не дало
![](/images/graemlins/frown.gif)
Вариант 1: progra~1\prog\myprog
Вариант 2: "python ""Program Files\prog\myprog"" > log.txt"
На "Program Files", в смысле.
Может, есть какой-нибудь аналог execv(3) или execl(3)?
---
...Я работаю антинаучным аферистом...
E:\>set ProgramFiles
ProgramFiles=C:\Program Files
он знает, где лежит этот файл, ему надо было просто написать путь с пробелами
![](/images/graemlins/grin.gif)
Метод 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.
![](/images/graemlins/blush.gif)
В итоге я знаю что wsh безмерно крут и всех рвет-порвет, но что это — до сих пор непонятно.
![](/images/graemlins/smile.gif)
Я за виндовсом года 2-3 уж не сидел, а проги так вообще никогда не писал.
Но ничего, с сегодняшнего дня еще и Mac будет
![](/images/graemlins/cool.gif)
один дурак напишет и все вместо того чтобы доку почитать за ним повторяют...
вон выше уже написал правльный ответ.
на каком языке написаны эти .vbsvbs = VBScript = Visual Basic Script
в комплект винды входят 2 wsh-ных интерпертатора: JScript (.js) и VBScript (.vbs). Но ничто не мешает добавить туда свой. Возможно что они уже есть где-нибудь для скачивания.
запускаются все wsh-ные скрипты одинаково:
wscript <scriptfile>
для скриптов с графич. интерфейсом или без интерфейса.
либо
cscript <scriptfile>
для скриптов с консольным интерфейсом.
Информация интересна конечно, но тем не менее.
Поясню на всякий случай.
Там предлагается следующее.
Стырить у пользователя его логин/пароль, и с помощью имперсонейта получить консольку с его правами.
Чтоб реализовать это придется:
1. Убить сервис. Ну, если мы заюзали дыру в сервисе, то с правами этого сервиса мы как-нибудь с этим справимся. Никаких изысков.
2. Написать прогу, в идеале делающую то же самое, что и убитый сервис. На худой конец - общающуюся так же с клиентами до момента имперсонейта. Тип: можно юзайть пайпы.
3. Ждать, пока в нашу подставу залогинится кто то с крутыми правами.
Хочу заметить, что подобным способом можно пользоваться в любой оси.
Этот способ позволяет банально тырить пароли людей, использующих скомпрометированный сервис. А АПИ запуска программ с другими правами есть в любой оси.
И я даже уже не хочу говорить, что право имперсонейтить клиента для отдельного сервиса почти наверняка можно снять.
В общем, это не является какой то там мега дырой, которая по взмаху волшебной палочки дает вам елевейт прав. Это банальное следствие того, что взломав сервис, вы получаете доступ ко всей инфе, которой этот сервис обладает.
И если он обладает паролем админа, то наверное сами понимаете, на какой бы оси этот сервис не крутился, надо будет сильно потрудиться, чтобы хакер с этим паролем админа не нашел куда бы сунуться.
Так что заявление, что виндовозные сервисы суть "одна большая дыра", основанное на этом артикле, выглядит, мягко говоря, необоснованным.
ЗЫ Предупреждая какой нить очередной холи вар, скажу, что я не являюсь безоговорочным защитником и почитателем Винды, и сам иногда люблю поставить слакварь в 200 мегов дискового пространства, и потоптать консоль, чтобы запустить там вайном виндовозный сервис.
Но вот мимо таких заявлений мне тяжко проходить молча.
Или запустить оригинальный сервис с другим именем и всё ему редиректить.
Извиняюсь за некрофилизм, но вы этот артикл вообще потрудились прочитать?Потрудился, но не очень хорошо понял ограничения данного метода эскалации привилегий, так как не знаком с моделью защиты в 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-окна не появлялось.
Как это сделать?