Что нового

@ComSpec пробел

SharkyEXE

Новичок
Сообщения
134
Репутация
0
Версия AutoIt: 3.3.12.0

Описание:
Всем здравствуйте.

Моя ОС: MS Windows 8.1 update 3 Pro x64 Rus

1) Написал файл C:\1.au3:
Код:
#RequireAdmin

#NoTrayIcon

# Максимальный уровень сжатия для выходного файла *.exe
#AutoIt3Wrapper_Compression=4
# Сжатие UPX для выходного файла *.exe
#AutoIt3Wrapper_UseUpx=y

$sExe1 = "Windows\system32"
$var = EnvGet("SystemDrive")
$sExe2 = $var & "\" & $sExe1 & "\"

$ServiceName1 = "VMAuthdService"
$ProcessName1 = "vmware-authd.exe"

$ServiceName2 = "VMnetDHCP"
$ProcessName2 = "vmnetdhcp.exe"

$ServiceName3 = "VMware NAT Service"
$ProcessName3 = "vmnat.exe"

$ServiceName4 = "VMUSBArbService"
$ProcessName4 = "vmware-usbarbitrator64.exe"

$ServiceName5 = "VMwareHostd"
$ProcessName5 = "vmware-hostd.exe"

$ProcessName6 = "vmware.exe"
$ProcessName7 = "vmware-tray.exe"

$ProgramFiles = "Program Files (x86)"
# $ProgramFiles = "Program Files"

$Path = "VMware\VMware Workstation\vmware.exe"

# $MyCommand1 = 'sc.exe config "VMAuthdService" start=demand'
# RunWait(@ComSpec & " /c " & $MyCommand1, $sExe2, @SW_HIDE)
RunWait(@ComSpec & " /c " & "sc.exe config " & $ServiceName1 & " start=demand", $sExe2, @SW_HIDE)

# $MyCommand2 = 'sc.exe config "VMnetDHCP" start=demand'
# RunWait(@ComSpec & " /c " & $MyCommand2, $sExe2, @SW_HIDE)
RunWait(@ComSpec & " /c " & "sc.exe config " & $ServiceName2 & " start=demand", $sExe2, @SW_HIDE)

# $MyCommand3 = 'sc.exe config "VMware NAT Service" start=demand'
# RunWait(@ComSpec & " /c " & $MyCommand3, $sExe2, @SW_HIDE)
RunWait(@ComSpec & " /c " & "sc.exe config " & $ServiceName3 & " start=demand", $sExe2, @SW_HIDE)

# $MyCommand4 = 'sc.exe config "VMUSBArbService" start=demand'
# RunWait(@ComSpec & " /c " & $MyCommand4, $sExe2, @SW_HIDE)
RunWait(@ComSpec & " /c " & "sc.exe config " & $ServiceName4 & " start=demand", $sExe2, @SW_HIDE)

# $MyCommand5 = 'sc.exe config "VMwareHostd" start=demand'
# RunWait(@ComSpec & " /c " & $MyCommand5, $sExe2, @SW_HIDE)
RunWait(@ComSpec & " /c " & "sc.exe config " & $ServiceName5 & " start=demand", $sExe2, @SW_HIDE)

# $MyCommand6 = 'sc.exe start "VMAuthdService"'
# RunWait(@ComSpec & " /c " & $MyCommand6, $sExe2, @SW_HIDE)
RunWait(@ComSpec & " /c " & "sc.exe start " & $ServiceName1, $sExe2, @SW_HIDE)

# $MyCommand7 = 'sc.exe start "VMnetDHCP"'
# RunWait(@ComSpec & " /c " & $MyCommand7, $sExe2, @SW_HIDE)
RunWait(@ComSpec & " /c " & "sc.exe start " & $ServiceName2, $sExe2, @SW_HIDE)

# $MyCommand8 = 'sc.exe start "VMware NAT Service"'
# RunWait(@ComSpec & " /c " & $MyCommand8, $sExe2, @SW_HIDE)
RunWait(@ComSpec & " /c " & "sc.exe start " & $ServiceName3, $sExe2, @SW_HIDE)

# $MyCommand9 = 'sc.exe start "VMUSBArbService"'
# RunWait(@ComSpec & " /c " & $MyCommand9, $sExe2, @SW_HIDE)
RunWait(@ComSpec & " /c " & "sc.exe start " & $ServiceName4, $sExe2, @SW_HIDE)

# $MyCommand10 = 'sc.exe start "VMwareHostd"'
# RunWait(@ComSpec & " /c " & $MyCommand10, $sExe2, @SW_HIDE)
RunWait(@ComSpec & " /c " & "sc.exe start " & $ServiceName5, $sExe2, @SW_HIDE)

ShellExecuteWait ($var & "\" & $ProgramFiles & "\" & $Path)

While ProcessExists ($ProcessName1)
ProcessClose ($ProcessName1)
WEnd

While ProcessExists ($ProcessName2)
ProcessClose ($ProcessName2)
WEnd

While ProcessExists ($ProcessName3)
ProcessClose ($ProcessName3)
WEnd

While ProcessExists ($ProcessName4)
ProcessClose ($ProcessName4)
WEnd

While ProcessExists ($ProcessName5)
ProcessClose ($ProcessName5)
WEnd

While ProcessExists ($ProcessName6)
ProcessClose ($ProcessName6)
WEnd

While ProcessExists ($ProcessName7)
ProcessClose ($ProcessName7)
WEnd

# $MyCommand11 = 'sc.exe config "VMAuthdService" start=Disabled'
# RunWait(@ComSpec & " /c " & $MyCommand11, $sExe2, @SW_HIDE)
RunWait(@ComSpec & " /c " & "sc.exe config " & $ServiceName1 & " start=Disabled", $sExe2, @SW_HIDE)


# $MyCommand12 = 'sc.exe config "VMnetDHCP" start=Disabled'
# RunWait(@ComSpec & " /c " & $MyCommand12, $sExe2, @SW_HIDE)
RunWait(@ComSpec & " /c " & "sc.exe config " & $ServiceName2 & " start=Disabled", $sExe2, @SW_HIDE)

# $MyCommand13 = 'sc.exe config "VMware NAT Service" start=Disabled'
# RunWait(@ComSpec & " /c " & $MyCommand13, $sExe2, @SW_HIDE)
RunWait(@ComSpec & " /c " & "sc.exe config " & $ServiceName3 & " start=Disabled", $sExe2, @SW_HIDE)

# $MyCommand14 = 'sc.exe config "VMUSBArbService" start=Disabled'
# RunWait(@ComSpec & " /c " & $MyCommand14, $sExe2, @SW_HIDE)
RunWait(@ComSpec & " /c " & "sc.exe config " & $ServiceName4 & " start=Disabled", $sExe2, @SW_HIDE)

# $MyCommand15 = 'sc.exe config "VMwareHostd" start=Disabled'
# RunWait(@ComSpec & " /c " & $MyCommand15, $sExe2, @SW_HIDE)
RunWait(@ComSpec & " /c " & "sc.exe config " & $ServiceName5 & " start=Disabled", $sExe2, @SW_HIDE)

Exit

2) Компилирую файл C:\1.au3, поулчается файл C:\1.exe
3) От Имени администартора запускаю файл C:\1.exe
4) Появляется окно VMWare
5) Делаю клик правой кнопкой мышки по Мой компьютер
6) Появляется меню
7) Выбираю Управление
8) Появляется окно с заголовком Управление компьютером
9) Перехожу в Службы и приложения
10) Перехожу в Службы
11) Вижу, что для строки VMware NAT Service:
11-1) Состояние: пусто
11-2) Тип запуска: Отключена
12) Остальные службы:
12-1) VMAuthdService
12-2) VMnetDHCP
12-3) VMUSBArbService
12-4) VMwareHostd
Состояние: Выполняется
Тип запуска: Вручную

Я так понимаю, что для службы VMware NAT Service ничего не сработало, потому что название службы VMware NAT Service состоит из пробелов

Пожалуйста, напишите мне, что не так, почему строки не срабатывают:
1) RunWait(@ComSpec & " /c " & "sc.exe config " & $ServiceName3 & " start=demand", $sExe2, @SW_HIDE)
2) RunWait(@ComSpec & " /c " & "sc.exe start " & "$ServiceName3", $sExe2, @SW_HIDE)

Спасибо.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
:
А зачем вы программу sc.exe запускаете через @ComSpec?
 
Автор
S

SharkyEXE

Новичок
Сообщения
134
Репутация
0
inververs сказал(а):
:
А зачем вы программу sc.exe запускаете через @ComSpec?
Потому что может слететь переменная PATH и команда sc.exe перестанет работать

А так, когда я указываю полный путь к программе sc.exe - все работает.

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

А вот служба VMware NAT Service с пробемами в названии, для этой службы не работает:
запуск
установка флага вручную
установка флага отключено

Тут даже может быть бага, что команда @ComSpec, содержащая проблелы, в AutoIt не работает

А там может быть у меня что не так.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
SharkyEXE [?]
Потому что может слететь переменная PATH и команда sc перестанет работать
Переменная PATH тут не причем.

установка флага вручнуюустановка флага отключено
У меня в справке написано что между start=demand должен быть пробел.
Код:
Примечание. Имя параметра включает знак равенства (=).
      Между знаком равенства и значением параметра должен быть пробел.
Код:
RunWait('sc.exe config "VMware NAT Service" start= demand', @SystemDir, @SW_HIDE)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
SharkyEXE,
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
 
Автор
S

SharkyEXE

Новичок
Сообщения
134
Репутация
0
inververs
В том то и задачка, спортивный интерес, что мне надо, чтобы VMware NAT Service была как переменная

Пишем код: объявляем имя службы VMware NAT Service переменной
Код:
$ServiceName = "VMware NAT Service"


Пишем код: изменить тип запуска службы VMware NAT Service на Вручную
Код:
RunWait(@ComSpec & " /c " & "sc.exe config " & $ServiceName & " start=demand", $sExe2, @SW_HIDE)


Запуксаем полученный код - не работает

Если сделать как у Вас:
Код:
RunWait('sc.exe config "VMware NAT Service" start= demand', @SystemDir, @SW_HIDE)

то это работает, я проверял сам, только мне надо, чтобы имя службы VMware NAT Service была переменной

madmasles
Извините меня, пожалуйста.

Первый пост исправил согласно правилам.
Прошу прощения.
 
Автор
S

SharkyEXE

Новичок
Сообщения
134
Репутация
0
firex
Ничего личного, а стандартными средствами AutoiT вообще чтоли не поулчится сделать так, чтобы
Код:
@ComSpec
понимал побелы в названии службы?

Просто не хочется доп. модули подключать, хочется стандартными средствами AutoIt сделать.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
SharkyEXE [?]
понимал побелы в названии службы?
А если перед запуском сделать так?
Код:
$ServiceName = "VMware NAT Service"
If StringInStr($ServiceName, ' ') Then $ServiceName = '"' & $ServiceName & '"'
ConsoleWrite($ServiceName & @LF)
 
Автор
S

SharkyEXE

Новичок
Сообщения
134
Репутация
0
InnI сказал(а):
А если так?
Код:
$ServiceName = "VMware NAT Service"
RunWait('sc.exe config "' & $ServiceName & '" start= demand', @SystemDir, @SW_HIDE)
Это работает 100%но, ура!

madmasles сказал(а):
А если перед запуском сделать так?
Код:
$ServiceName = "VMware NAT Service"
If StringInStr($ServiceName, ' ') Then $ServiceName = '"' & $ServiceName & '"'
ConsoleWrite($ServiceName & @LF)
Извините меня, пожалуйста, а как проверить Ваш способ, что мне после строки
Код:
ConsoleWrite($ServiceName & @LF)

написать, чтобы службе VMware NAT Service сделать Тип запуска: вручную?

Спасибо.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
SharkyEXE [?]
Код:
$ServiceName = "VMware NAT Service"
If StringInStr($ServiceName, ' ') Then $ServiceName = '"' & $ServiceName & '"'
RunWait('sc.exe config ' & $ServiceName & ' start= demand', @SystemDir, @SW_HIDE)
Разница в том, что в моём примере имя службы (переменная) обрамляется кавычками принудительно при запуске sc.exe, а в примере madmasles кавычки добавляются в саму переменную при условии наличия в ней пробела.
 
Автор
S

SharkyEXE

Новичок
Сообщения
134
Репутация
0
InnI сказал(а):
SharkyEXE [?]
Код:
$ServiceName = "VMware NAT Service"
If StringInStr($ServiceName, ' ') Then $ServiceName = '"' & $ServiceName & '"'
RunWait('sc.exe config ' & $ServiceName & ' start= demand', @SystemDir, @SW_HIDE)
Разница в том, что в моём примере имя службы (переменная) обрамляется кавычками принудительно при запуске sc.exe, а в примере madmasles кавычки добавляются в саму переменную при условии наличия в ней пробела.
Это работает 100%но, ура!

Большое всем спасибо за помощь, за объяснение мне нюансов, что и как работает.

С наступающим всех, уважаемые пользователи AutoIt! :IL_AutoIt_1:
 

СН3СН2ОН

Знающий
Сообщения
78
Репутация
12
SharkyEXE сказал(а):
inververs
В том то и задачка, спортивный интерес, что мне надо, чтобы VMware NAT Service была как переменная
Понимаю, что тема решенная, но почему сразу нельзя объявить
Код:
$ServiceName = '"VMware NAT Service"'

Или так, смешной автоит
Код:
$ServiceName = """VMware NAT Service"""
 
Автор
S

SharkyEXE

Новичок
Сообщения
134
Репутация
0
СН3СН2ОН сказал(а):
Понимаю, что тема решенная, но почему сразу нельзя объявить
Код:
$ServiceName = '"VMware NAT Service"'

Или так, смешной автоит
Код:
$ServiceName = """VMware NAT Service"""

Большое Вам спасибо за совет.

Я тоже сначала думал про это, но у меня же есть кавычки
Код:
$ServiceName1 = "VMAuthdService"


При том что в языке cmd если есть кавычки, то автоматом все под одними кавычками читается, например
Код:
Rd "C:\Program Files\123"

Про то, что в языке AutoIt, если:
1) объявляем пеерменную
2) переменная содержит кавычки

я первый раз от Вас вижу, что нужны двойные кавычки.

Большое Вам спасибо за информацию...
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
SharkyEXE [?]
переменная содержит кавычки
В скрипте строка заключается в кавычки для того, чтобы AutoIt мог понять - где строка начинается и где заканчивается. Другими словами первая и последняя кавычка в переменную не включаются. Здесь почитайте про тип "строки" и кавычки внутри них.
 
Автор
S

SharkyEXE

Новичок
Сообщения
134
Репутация
0
InnI сказал(а):
В скрипте строка заключается в кавычки для того, чтобы AutoIt мог понять - где строка начинается и где заканчивается. Другими словами первая и последняя кавычка в переменную не включаются. Здесь почитайте про тип "строки" и кавычки внутри них.
Большое Вам спасибо за информацию. :ok:
 
Верх