[closed]Запустить .bat-файл не открывая cmd-окна.

pilot

В виндузе:
Есть .bat-файл, который запускает программу (python.exe [args]).
Хочется запускать программу из Start->All programs->...->ProgramName так, чтобы не выезжало окна запуска .bat-файла (там сервер стартует не надо чтобы пользователь окно видел.
Ну и просто в Explorere 2 раза кликаем на файл — чтоб cmd-окна не появлялось.
Как это сделать?

apl13

А еще расскажите, как бы его поредактировать без текстового редактора...

maggi14

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

maggi14

или WSH

pilot

Предложи альтернативный способ запуска интерпретатором Python программы на Python. Программе передаются аргументы. Программа — сервер, портить пользователю жизнь окошками своими не должна.
Я в виндовзе плохо разбираюсь, знаешь — скажи.
Я погуглил нашел только команду start — вроде не то что нужно.

Ivan8209

Почему бы не воспользоваться теми программами, которые для этого и предназначены?
В Cygwin есть такая.
---
...Я работаю антинаучным аферистом...

disna

есть такая прожка.
cmdow называется

maggi14

сделай ярлык питона и пропиши ему командные параметры

Svyatogor

Именно так, при создании ярлыка можно указать параметры (в той же строке, где имя исполняемого файла указывается). Если же в батнике используется что-то продвинутое, то создаем *.vbs файл для запуска батника. Содержимое vbs'а создается примерно такое, как описано здесь.

pilot

Я понял про ярлык/shotrcut, я экспериментировал.
Ну так вот: все равно открывается окно.
Может быть оно открывается потому что прога хочет в stdout написать?

pilot

Как я понимаю — это тот же .bat с картинкой.

Ivan8209

Почему бы не сделать stdout туда, куда надо?
---
...Я работаю антинаучным аферистом...

maggi14

pithon.exe tratata pumpum > nul
попробуй, вдруг получится

Ivan8209

Это не поправит stderr.
---
"Аллах не ведёт людей неверных."

maggi14

stderr и не надо поправлять, полагаю.

rjirf

Народ, вы чо несете? Пишете например
start java --jar arch.jar
и никакого окна не открывается

pilot

Неа, не получается

maggi14

да, я уже вижу

pilot

Спасибо, читаю.

Ivan8209

"start cmd /c echo" --- и откроется.
---
"Расширь своё сознание."

katrin2201

А вариант запускать программу сервисом не катит?
Тот же FireDaemon без напряга сделает сервис, который и будет тебе запускать твое питонообразное, при этом естественно никаких окошек вылезать не будет.

pilot

Мне не надо Cygwin. Мне надо не "чтоб у меня заработало" а "чтоб заработало у всех пользователей виндовз", а пользователи виндовз cygwin ставить не будут.

evgen5555

Не забудь упомянуть, что юзерские программы, а тем более интерпретаторы, запускаемые от имени Local System, являются огромной брешью в системе.

katrin2201

Сервисы уже давно можно запускать от любого пользователя системы.

maggi14

а можно использовать экзешники вместо бата? или это некошерно?

artimon

+1

Ivan8209

Ты же всё равно питон ставить будешь, так?
Что тебе мешает поставить окромя питона ещё и дополнительную примочку?
Последнюю можно смоделировать по образу и подобию той, что из Cygwin.
Или просто поставить цигвиновскую.
---
"У цигвина крылья --- вот тако-ой ширины!"

pilot

Кошерно на самом деле. т.е. можно, если научиться автоматически exeшники делать.
Чтоб они были бесплатные, без баннеров, кроссплатформенные (для разных винд). Желательно средствами windows.
Я такого не умею. Попробовал bat2com и com2exe — не работает то что получилось.

Marinavo_0507

Сервисы уже давно можно запускать от любого пользователя системы.
Толку маловато: 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.

Ivan8209

Тебя научить патчить бинарники?
---
...Я работаю антинаучным аферистом...

gopnik1994

Че вы гадаете?
вам уже ответили правильно:

pilot

Я читаю лицензию.
И там написано только про win-32-bit. Что она сделает с 64-битной?

artimon

ХЗ.
Возьми да запусти, в чём проблема-то?

pilot

Проблемы такие:
Лицензии нет, 64-битной винды в окрестности нет.

gopnik1994

а чем WSH не устроил?
это же стандартное виндовое средство...

artimon

На что лицензии нет?
Этой что ли?
Cmdow v1.4.3 for Windows NT4/2000/XP
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 />
А вообще, HG прав, юзай WSH

pilot

Тем что я не знаю что это такое.
Я разбираюсь с ним сейчас, просто параллельно рассмотрел остальные варианты.
Например, у Python есть pythonw (спасибо _Ss_) — он интерпретатор запускает, если stdout и stderr перенаправить в файл — то все хорошо. Однако ж питон стартует еще программу на другом языке, и вот для нее уже окно появляется...

gopnik1994

там не надо разбираться
создаешь вот такой файл c расширением .vbs:
runpython.vbs

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "python myprog > log.txt", 0, false

и запускаешь его потом ярлыком "wscript runpython.vbs"
все.

pilot

Некошерный log.txt тут появляется.
В таком виде pythonw.exe тоже умеет.

gopnik1994

если вывод не нужет тогда напиши не log.txt, а nul...

maggi14

ну можно ведь не log.txt, a nul

Svyatogor

Боюсь, что автору это уже не поможет. Он таки проговорился, что
Однако ж питон стартует еще программу на другом языке, и вот для нее уже окно появляется...
Для того, чтобы это исправить, нужно либо править код программы (чтобы из него указанная программа запускалась правильно, т.е. запускать с необходимыми ключами / запускать *.vbs, который запустит нужную программу либо запускать ее как службу без возможности взаимодействия с пользователем / на другом десктопе.
Т.е. исходная задача, видимо, такая: запуск приложения и всех запускаемых им приложений в скрытом состоянии.

maggi14

вроде, здесь когда-то был тред, посвященный перенаправлению stdout'ов всех дочерних процессов куда-нибудь.

pilot

Боюсь, что автору это уже не поможет. Он таки проговорился, что
Помогает pythonw.exe program > log.txt 2>err.txt
Но эта команда правильно работает из командной строки. Не подымает лишних окон. (и про непитонью прогу тож не поднимает).
Остается вопрос как shortcut'ом запустить такую команду. Если эту же команду написать в shortcut->target — не работает.

gopnik1994

запуск приложения и всех запускаемых им приложений в скрытом состоянии.
в общем случае не рализуется, потому как процесс может легко создать новую консоль, если захочет.
vbs не блокирует создание консоли, а просто скрывает ее. Так что все, кому нужен stdout/stderr будут срать в невидимую консоль и не будут мешать. Так что скоррее всего автору это поможет.
Иначе - только сервис...

pilot

http://forum.kaspersky.com/index.php?showtopic=9975&mode...
не думаю что пользователь обрадуется использованию такой штуки.

Dasar

> Иначе - только сервис...
как минимум - еще runas есть

gopnik1994

еще пользователя без прав доступа к интерфейсу создавать?
а если запускаемой проге прав не хватит?

pilot

Иначе - только сервис
Можно сделать запуск сервиса каким-нибудь запускабельным файлом, и сделать его через start->all programs->...?
Я умею делать сервисы, запускающиеся при старте винды. Ну или руками в services их запускать-останавливать.
shortcut с net start <program> — тоже показывает окно.

Dasar

ошибся, runas делать не умеет, то что я имел ввиду.
> еще пользователя без прав доступа к интерфейсу создавать?
нет, достаточно просто запустить программу под другой сессией (например, так делает scheduler, если указан пользователь, отличный от залогиненного)

maggi14

можно, и даже просто.

maggi14

могу привести код на плюсплюсе

pilot

Который при запуске будет открывать окно?

maggi14

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

Svyatogor

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

evgen5555

Блин, программа на C с одной инструкцией CreateProcess, запускающая батник в нулевом окне будет занимать максимум двадцать строк.

gopnik1994

а в bvscripts 2 строки

pilot

Спасибо всем, решил с помощью wsh.
Отдельное спасибо и .

pilot

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "python myprog > log.txt", 0, false

Кто-нибудь может рассказать как вместо myprog вставить Program Files\prog\myprog?
В "Program Files" же пробел есть.
Или дать ссылку на нормальный учебник по синтаксису. Погугливание ничего не дало

artimon

М-да…
Вариант 1: progra~1\prog\myprog
Вариант 2: "python ""Program Files\prog\myprog"" > log.txt"

Ivan8209

А туда не указывает какая-нибудь переменная окружения?
На "Program Files", в смысле.
Может, есть какой-нибудь аналог execv(3) или execl(3)?
---
...Я работаю антинаучным аферистом...

Andbar

Win2k3sp1-StdandartEdition
E:\>set ProgramFiles
ProgramFiles=C:\Program Files

gopnik1994

на XP тоже есть, но не это надо автору.
он знает, где лежит этот файл, ему надо было просто написать путь с пробелами

0000

Goolgle отстой, Яndex рулит - 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

pilot

он знает, где лежит этот файл, ему надо было просто написать путь с пробелами
Да, я просто не в курсе на каком языке написаны эти .vbs и искал wsh.
В итоге я знаю что wsh безмерно крут и всех рвет-порвет, но что это — до сих пор непонятно.
Я за виндовсом года 2-3 уж не сидел, а проги так вообще никогда не писал.
Но ничего, с сегодняшнего дня еще и Mac будет

gopnik1994

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

gopnik1994

на каком языке написаны эти .vbs
vbs = VBScript = Visual Basic Script

gopnik1994

wsh - это стандарт+API для скриптовых интерпретаторов.
в комплект винды входят 2 wsh-ных интерпертатора: JScript (.js) и VBScript (.vbs). Но ничто не мешает добавить туда свой. Возможно что они уже есть где-нибудь для скачивания.
запускаются все wsh-ные скрипты одинаково:
wscript <scriptfile>
для скриптов с графич. интерфейсом или без интерфейса.
либо
cscript <scriptfile>
для скриптов с консольным интерфейсом.

katrin2201

Извиняюсь за некрофилизм, но вы этот артикл вообще потрудились прочитать? =)
Информация интересна конечно, но тем не менее.
Поясню на всякий случай.
Там предлагается следующее.
Стырить у пользователя его логин/пароль, и с помощью имперсонейта получить консольку с его правами.
Чтоб реализовать это придется:
1. Убить сервис. Ну, если мы заюзали дыру в сервисе, то с правами этого сервиса мы как-нибудь с этим справимся. Никаких изысков.
2. Написать прогу, в идеале делающую то же самое, что и убитый сервис. На худой конец - общающуюся так же с клиентами до момента имперсонейта. Тип: можно юзайть пайпы.
3. Ждать, пока в нашу подставу залогинится кто то с крутыми правами.
Хочу заметить, что подобным способом можно пользоваться в любой оси.
Этот способ позволяет банально тырить пароли людей, использующих скомпрометированный сервис. А АПИ запуска программ с другими правами есть в любой оси.
И я даже уже не хочу говорить, что право имперсонейтить клиента для отдельного сервиса почти наверняка можно снять.
В общем, это не является какой то там мега дырой, которая по взмаху волшебной палочки дает вам елевейт прав. Это банальное следствие того, что взломав сервис, вы получаете доступ ко всей инфе, которой этот сервис обладает.
И если он обладает паролем админа, то наверное сами понимаете, на какой бы оси этот сервис не крутился, надо будет сильно потрудиться, чтобы хакер с этим паролем админа не нашел куда бы сунуться.
Так что заявление, что виндовозные сервисы суть "одна большая дыра", основанное на этом артикле, выглядит, мягко говоря, необоснованным.
ЗЫ Предупреждая какой нить очередной холи вар, скажу, что я не являюсь безоговорочным защитником и почитателем Винды, и сам иногда люблю поставить слакварь в 200 мегов дискового пространства, и потоптать консоль, чтобы запустить там вайном виндовозный сервис.
Но вот мимо таких заявлений мне тяжко проходить молча.

bleyman

> 2. Написать прогу, в идеале делающую то же самое, что и убитый сервис. На худой конец - общающуюся так же с клиентами до момента имперсонейта. Тип: можно юзайть пайпы.
Или запустить оригинальный сервис с другим именем и всё ему редиректить.

Marinavo_0507

Извиняюсь за некрофилизм, но вы этот артикл вообще потрудились прочитать?
Потрудился, но не очень хорошо понял ограничения данного метода эскалации привилегий, так как не знаком с моделью защиты в Windows. Кстати, ты, похоже, разбираешься в этом, не посоветуешь, где можно найти краткое и понятное описание (я не первый раз спрашиваю на форуме, пока почему-то никто не показал).
Хочу заметить, что подобным способом можно пользоваться в любой оси.
Этот способ позволяет банально тырить пароли людей, использующих скомпрометированный сервис. А АПИ запуска программ с другими правами есть в любой оси.
В некоторых других осях сервису вообще незачем знать пароли клиентов, а также у них нет возможности получать дополнительные привилегии с помощью имперсонирования.

katrin2201

Потрудился, но не очень хорошо понял ограничения данного метода эскалации привилегий, так как не знаком с моделью защиты в Windows. Кстати, ты, похоже, разбираешься в этом, не посоветуешь, где можно найти краткое и понятное описание (я не первый раз спрашиваю на форуме, пока почему-то никто не показал).
В некоторых других осях сервису вообще незачем знать пароли клиентов, а также у них нет возможности получать дополнительные привилегии с помощью имперсонирования.
Мм. Наверно я не очень понятно объяснил.
Это самое имперсонирование как бы является аналогом su. Это такая АПИ функция, которой ты на вход подаешь логин/пароль - и на выходе получаешь эффективные права этого пользователя.
То есть ты можешь имперсонироваться, только если знаешь логин и пароль. И никак иначе. Если ты не знаешь пароля админа, ты не сможешь в него имперсонироваться, даже пускай взломав какой то сервис.
Просто взломанный сервис тебе может предоставить место, где ты потенциально сможешь имперсонироваться.
Соответственно, в артикле и идет речь о том, что допустим у нас есть сервис, к которому подключаются люди и вводят туда логин/пароль виндового пользователя на этом сервере. Что уж там дальше происходит, вобщем то все равно, но обычно поток связанный с этим человеком имперсонируется в введенного пользователя. Например фтп сервер, который юзает пользователей винды в качестве аккаунтов. Или что нибудь АктивДиректорнутое.
Ну и в артикле предлагают хакнуть такой сервис, написать для него обертку, подождать пока в сервис залогинится чуве с большими правами, таким образом стырить введеные им логин/пароль, и, грубо говоря, сделать туда su. Но, называя это красивым словом имперсонировать.
Причем, в винде вагон и тележка сервисов, в которые никто никогда не вводит пароли админа. Более того, их подавляющее большинство. И никаких дополнительных прав имперсонированием никто никогда не получит, хоть перетрейсив этот сервис вдоль и поперек.
Теперь вернемся к теме топика. Единственная дыра, которую дает питоновская программа, запущенная как сервис - следующая. Если кто то узнает логин/пароль администратора, то взломав этот сервис, он вероятно сможет получить админскую консольку, даже если на сервере не запущен какой нить ремоут десктоп сервер, или что то подобное.
Вероятно - потому что еще надо будет суметь через этот сервис умудриться подменить екзешник этого сервиса, но это уже детали.
Вобщем, получается своеобразный инъект логин скрина.
Ну и кроме того, как я уже говорил, это право имперсонейтиться вроде можно снять для отдельного пользователя, так что имхо создаете пользователя, лишаете его прав имперсонизации, пускаете под ним сервис, и потенциальная дырочка пропадает. Утверждать точно не буду, но вроде можно.
Вроде бы доступно объяснил. Поправьте если что.

ava3443

Ну и кроме того, как я уже говорил, это право имперсонейтиться вроде можно снять для отдельного пользователя, так что имхо создаете пользователя, лишаете его прав имперсонизации, пускаете под ним сервис, и потенциальная дырочка пропадает. Утверждать точно не буду, но вроде можно.
Судя по тому что пишут на Microsoft.com и по тому, что я вижу на своей Win2003 (член домена право "Impersonate a client after authentication" по умолчанию дано только группам Administrators и Service.
Оставить комментарий
Имя или ник:
Комментарий: