Запустите приложение на удаленном ПК с помощью c # [duplicate]

Используйте thing[:]

>>> a = [1,2]
>>> b = a[:]
>>> a += [3]
>>> a
[1, 2, 3]
>>> b
[1, 2]
>>> 
2
задан Polyfun 11 September 2014 в 09:21
поделиться

4 ответа

Ответ был комбинацией из ваших ответов. Но все правильное решение было:

        ProcessStartInfo info = new ProcessStartInfo("C:\\PsTools");
        info.FileName = @"C:\PsTools\psexec.exe";
        info.Arguments = @"\\" + serverName + @" -i C:\WINDOWS\notepad.exe";
        info.RedirectStandardOutput = true;
        info.UseShellExecute = false;
        Process p = Process.Start(info);
5
ответ дан MrProgram 21 August 2018 в 09:31
поделиться

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

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

Вы можете проверить это: Удаленный UAC LocalAccountTokenFilterPolicy

0
ответ дан Alexey 21 August 2018 в 09:31
поделиться

Путь UNC не выглядит хорошим.

После конкатенации строк он будет выглядеть примерно так:

  "\\serverNameC:\WINDOWS\notepad.exe"

Попробуйте распечатать его. См. Документацию по UNC на MSDN и некоторые примеры здесь (или google о UNC-пути)

Если у вас есть только общие домены, это должно быть что-то вроде

  "\\serverName\C$\WINDOWS\notepad.exe"

ИЛИ psexec позволяет использовать другую нотацию, но вы должны быть осторожны с двойными кавычками там

  psexec \\serverName"c:\WINDOWS\notepad.exe"

Также убедитесь, что служба «Сервер» выполняется на целевой машине.

PsExec запускает исполняемый файл в удаленной системе и управляет потоками ввода и вывода процесса исполняемого файла, чтобы вы могли взаимодействовать с исполняемым файлом из локальной системы. PsExec делает это, извлекая из исполняемого образа встроенную службу Windows с именем Psexesvc и копируя ее на долю Admin $ в удаленной системе. Затем PsExec использует API-интерфейс диспетчера служб Windows, который имеет удаленный интерфейс, для запуска службы Psexesvc в удаленной системе.

Активный ресурс Admin $ создается и управляется сервером «Сервер», службы, так что вам нужно, чтобы он работал для работы psexec ( http://windowsitpro.com/systems-management/psexec ).

2
ответ дан Lorenzo Dematté 21 August 2018 в 09:31
поделиться
  • 1
    Теперь, когда вы упомянули об этом, я попробую C $ – MrProgram 11 September 2014 в 09:26
  • 2
    Сначала попробуйте использовать его в командной строке. Затем, когда он будет работать, вставьте его в свою программу на C #. Так проще ... – Lorenzo Dematté 11 September 2014 в 09:27
  • 3
    Hmm ok..Psexec находится на сервере, так что это не должно быть проблемой. Но я не уверен в командной строке – MrProgram 11 September 2014 в 09:32
  • 4
    psexec работает на вашем компьютере. Он "вытаскивает" услугу (встроенную в ее собственные ресурсы), копирует ее на сервер или "целевую" машины и запускает его. Копия происходит с использованием ресурса Admin $; поэтому & quot; Server & quot; необходимо запустить (автоматически или вручную) – Lorenzo Dematté 11 September 2014 в 09:34
  • 5
    Сейчас у меня это работает. С помощью @ & quot; \\ & quot; + serverName + @ & quot; -i C: \ WINDOWS\notepad.exe & quot ;; – MrProgram 11 September 2014 в 10:52

Запуск интерактивной программы, такой как notepad.exe, не всегда открывает видимое окно на целевом ПК. Попробуйте открыть диспетчер задач на целевом компьютере во время запуска кода и посмотреть, появляется ли notepad.exe в списке запущенных процессов.

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

psexec \\serverName "notepad.exe"

Вы также можете использовать «интерактивный» флаг, чтобы он может взаимодействовать с рабочим столом на целевой.

psexec \\serverName "notepad.exe" -i
3
ответ дан Peter Evans 21 August 2018 в 09:31
поделиться
  • 1
    Он также не запускал этот процесс, я проверил – MrProgram 11 September 2014 в 09:32
  • 2
    Получаете ли вы ошибку при работе в строке cmd? Связаны ли исходный и целевой ПК с одним и тем же доменом? Если да, имеет ли учетная запись, на которой запущена команда psexec, разрешения на целевом ПК? Попробуйте добавить учетную запись в локальную группу администратора на целевой рабочей станции. – Peter Evans 11 September 2014 в 09:37
  • 3
    Еще один тест, который вы можете попробовать, - попытаться отобразить сетевой диск с исходного ПК на целевой компьютер. Попробуйте выполнить следующее из командной строки. net use \\ serverName \ c $ – Peter Evans 11 September 2014 в 09:42
  • 4
    Нет ошибок. Хм ... Домен то же самое. Разрешения также правильные – MrProgram 11 September 2014 в 09:59
  • 5
    Попробуйте проверить, открыты ли порты 135 и 445 на брандмауэре целевых серверов. – Peter Evans 11 September 2014 в 10:36
Другие вопросы по тегам:

Похожие вопросы: