VB net, cmd, выполнение команд

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

VB net, cmd, выполнение команд

Сообщение Anta » 10.10.2012 (Ср) 3:33

Здраствуйте, подскажите, как релизовать такую задачу: нужно запустить из VB cmd.exe на сервере и затем выполнить 10 комманд: к примеру первая команда выполенеие экспорта exportdmp из БД Оракл, потом импорт в БД оракл, затем создание bat фйалов, затем создание катологов на сервере и еще несколько комманд. Первый раз сталкиваюсь с этой задачей, не знаю как подойти...Спасибо

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 10.10.2012 (Ср) 7:42

Можно сделать bat-файл. Можно выполнять команды поштучно. Можно запустить cmd с перенаправлением ввода.

Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

Re: VB net, cmd, выполнение команд

Сообщение Anta » 10.10.2012 (Ср) 14:54

Qwertiy писал(а):Можно сделать bat-файл. Можно выполнять команды поштучно. Можно запустить cmd с перенаправлением ввода.

если это bat файл, то в нем нужно написать каждую команду на новой строке? файл хранить на сервере? а как запустить выполнение файла с использованием cmd.exe сервера, если приложение vb находится на моей рабочей машине? в какой теме можно найти примеры? Спасибо

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 10.10.2012 (Ср) 16:41

Хм... Тогда не знаю.
А как вообще приложение с сервером взаимодействуют?

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Re: VB net, cmd, выполнение команд

Сообщение Dmitriy2003 » 10.10.2012 (Ср) 18:31

cmd в топку, лучше воспользуйся WinRM+PowerShell, и не придется изобретать велосипед,,, :drunken:

Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

Re: VB net, cmd, выполнение команд

Сообщение Anta » 10.10.2012 (Ср) 20:04

Qwertiy писал(а):Хм... Тогда не знаю.
А как вообще приложение с сервером взаимодействуют?

в смысле? приложение выбирает данны из бд, пользователь редактирует и отправляет данные обратно.
разработчик бд хочит автоматизировать создания cхем на бд, хочит по нажатию кнопки на форме запустить экспорт/импорт схемы и создание необходимых директорий на сервере.

Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

Re: VB net, cmd, выполнение команд

Сообщение Anta » 10.10.2012 (Ср) 20:05

Dmitriy2003 писал(а):cmd в топку, лучше воспользуйся WinRM+PowerShell, и не придется изобретать велосипед,,, :drunken:

посмотрю, спасибо

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 10.10.2012 (Ср) 20:43

Ещё раз. Как приложение взаимодействует с сервером? Кроме СУБД.

Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

Re: VB net, cmd, выполнение команд

Сообщение Anta » 11.10.2012 (Чт) 4:18

Qwertiy писал(а):Ещё раз. Как приложение взаимодействует с сервером? Кроме СУБД.

Извините, возможно,я не правильно поняла ваш вопрос. В коде прописан конекшен стринг, подключаюсь к БД как system, использую Oledb, в некотрых случает используется dateREADER, в других случаях через dataset и всё... Не судите строго, программировала последний раз ...лет назад

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 11.10.2012 (Чт) 10:14

А тебе не кажется, что для того, что ты хочешь, надо как-то подключаться непосредственно к серверу, а не к БД? Или я не прав?

Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

Re: VB net, cmd, выполнение команд

Сообщение Anta » 11.10.2012 (Чт) 14:32

Qwertiy писал(а):А тебе не кажется, что для того, что ты хочешь, надо как-то подключаться непосредственно к серверу, а не к БД? Или я не прав?

совершенно верно, вот в поисках литературы по данному вопросу...

Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

Re: VB net, cmd, выполнение команд

Сообщение Anta » 12.10.2012 (Пт) 4:32

Кто-то может посоветовать литературу и примеры по данному вопросу?

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: VB net, cmd, выполнение команд

Сообщение ark » 12.10.2012 (Пт) 11:08

А что, в Oracle нету что-нить типа xp_cmdshell?

Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

Re: VB net, cmd, выполнение команд

Сообщение Anta » 16.01.2013 (Ср) 5:19

Подскажите, можно ли на vb net запустить запустить скрипт на удаленной машине, открыв сначала программу(на этой же удаленной машине), где он должен быть выполнен. На piton есть пример:
Код: Выделить всё
import subprocess
subprocess.Popen(['c:\\Program Files\\FME\\fme.exe','D:\\mapping\\script\\fme\\script.fmw'])
.
Для запуска программ на удаленной машине использую что-то типа:
Код: Выделить всё
Try
            Shell("C:\PSEXEC.EXE \\machine100\\с:\Program Files\\FME\\fme.exe', vbNormalFocus, True, 500000)
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Message d'alerte", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

А как и где можно указать, что нужно еще выполнить скрипт?
Спасибо.

Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

Re: VB net, cmd, выполнение команд

Сообщение Anta » 08.02.2013 (Пт) 3:42

Подскажите, где ошибка в коде.
Код: Выделить всё
Public Sub FME()
        Dim timeOut As Integer = 50000
        Dim p As New Process
        With p.StartInfo

            .FileName = "C:PSexec.exe"
            .Arguments = "PSexec.exe \\machine1\ -u user -p pass -d -i 0 ""C:\Program Files\FME\fmeworkbench.exe"""
              .WindowStyle = ProcessWindowStyle.Normal

        End With
        p.Start()

      End Sub


В окне doc появляется сообщение "Файл не найден".

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 08.02.2013 (Пт) 8:06

Anta писал(а):Подскажите, где ошибка в коде.

Как минимум тут:
Anta писал(а):"C:PSexec.exe"

Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

Re: VB net, cmd, выполнение команд

Сообщение Anta » 08.02.2013 (Пт) 16:30

да, исправила, не работает... файл не существует.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Re: VB net, cmd, выполнение команд

Сообщение Qwertiy » 08.02.2013 (Пт) 17:19

Anta писал(а):да, исправила, не работает... файл не существует.

Вот это странным кажется:
Anta писал(а):.Arguments = "PSexec.exe \\machine1\ -u user -p pass -d -i 0 ""C:\Program Files\FME\fmeworkbench.exe"""

Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

Re: VB net, cmd, выполнение команд

Сообщение Anta » 09.02.2013 (Сб) 5:23

без Psexec.exe не работает, выдает ошибку. Еще пытаюсь на сервере тоже через vb net, с использованием Psexec.exe запустить Autoexec Macro, созданный в Access 2010 и win7, но в окне Psexec.exe появляется сообщение, что это файл bd1.accdb не является application win32, хотя на сервере тоже стоит Access 2010. Не сталкивались?

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: VB net, cmd, выполнение команд

Сообщение Admiralisimys » 09.02.2013 (Сб) 19:25

Anta в Win32 я сталкивался с тем, что от CreateProcess() (функции лежащая в основании .NET класса Process) получить требуемый результат, заполнив два первых параметра, не удавалось.
В одной Win32 программе из трёх раз использования CreateProcess дважды был использован лишь второй параметр (когда нужно было вызвать программу с параметрами) и единожды лишь первый (вызов без параметров).
Как же используют её разработчики .NET внутри класса?
А вот как (код на CSharp)
Код: Выделить всё
private bool StartWithCreateProcess(ProcessStartInfo startInfo)
//...
StringBuilder commandLine = BuildCommandLine(startInfo.FileName, startInfo.Arguments);
//...
    retVal = NativeMethods.CreateProcess (
            null,               // we don't need this since all the info is in commandLine
            commandLine,        // pointer to the command line string
            null,               // pointer to process security attributes, we don't need to inheriat the handle
            null,               // pointer to thread security attributes
            true,               // handle inheritance flag
            creationFlags,      // creation flags
            environmentPtr,     // pointer to new environment block
            workingDirectory,   // pointer to current directory name
            startupInfo,        // pointer to STARTUPINFO
            processInfo         // pointer to PROCESS_INFORMATION
        );
//...
>>
Заполняют лишь второй параметр.
Иными словами я б не использовал FileName из startInfo вовсе, либо поэкспериментировал напрямую с упомянутой функцией.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList