Problem Psexec podczas uruchamiania aplikacji na komputerze z systemem Windows Server 2008 R2 z komputera z 2003 R2


2

Próbuję uruchomić aplikację na komputerze z systemem Windows Server 2008 R2 z komputera z systemem Windows Server 2003 R2 przy użyciu pliku wsadowego z następującym wierszem kodu w pliku wsadowym:

psexec \\nightmachine -u DOMAIN\User -p Password -i "C:\FilePath\Application.exe" argument1 argument2

Aplikacja nie działa poprawnie po uruchomieniu za pomocą psexec, ale aplikacja będzie działać poprawnie, jeśli zaloguję się do nightmachine z tym samym użytkownikiem i uruchomię go ze ścieżki pliku za pomocą cmd. Udało mi się pobrać błąd zwrócony w aplikacji z jego dziennika, a zwrócony wyjątek jest następujący:

System.DllNotFoundException: Nie można załadować biblioteki DLL „rasapi32.dll”: Nie powiodła się procedura inicjowania biblioteki DLL (DLL). (Wyjątek od HRESULT: 0x8007045A)

Po wyszukaniu tego kodu błędu w sieci istnieje wiele postów mówiących, że jest to spowodowane uszkodzeniem pliku, ale nie mogę zrozumieć, dlaczego tak się dzieje, ponieważ aplikacja będzie działać normalnie, gdy nie będzie uruchamiana z psexec. (użytkownik jest administratorem na obu komputerach)

Czy ktoś może mi w tym pomóc? Jeśli potrzebujesz więcej informacji, aby rozwiązać ten problem, zapytaj, a ja postaram się go opublikować.

Odpowiedzi:


0

Zakładam, że twój UNC w pytaniu ma tylko jeden ukośnik z powodu konieczności wpisania go w ten sposób tutaj w celu sformatowania „\\\”, ale jeśli nie, napraw to. Myślę, że problem polega na tym, że psexec patrzy na twoje argumenty poza cytatami i nie wie, co z nimi zrobić. Najprostszym sposobem może być po prostu umieszczenie tego polecenia, które możesz uruchomić na serwerze, w pliku wsadowym i psexec tego pliku wsadowego, lub możesz spróbować przenieść drugi cudzysłów po argumentach. Oczywiście wtedy nie możesz mieć żadnych spacji na ścieżce.

psexec \\nightmachine -u DOMAIN\User -p Password -i "C:\FilePath\Application.exe" argument1 argument2"

Dziękuję za odpowiedź, ale wypróbowałem oba rozwiązania, które zasugerowałeś i niestety żadne z nich nie rozwiązało problemu. Próbowałem dodać argumenty w cudzysłowie, co oznaczało, że psexec nie mógł znaleźć określonej ścieżki do pliku (bez spacji w ścieżce pliku), a także próbowałem użyć psexec do uruchomienia pliku wsadowego na maszynie nocnej, która następnie uruchamia aplikację. ten sam problem jak poprzednio
Vermin

@Vermin Jeśli możesz podać prawdziwe polecenie, być może będę w stanie Ci pomóc.
KCotreau

Aplikacja jest aplikacją do budowania celu, która robi różne rzeczy (nie wiem co, nie napisałem jej, po prostu muszę ją uruchomić zdalnie). polecenie to: psexec \\ nightmachine -u DOMAIN \ Użytkownik -p Hasło -i "C: \ Deployment \ DeploymentAspplication \ DeploySnapshot.exe" / najnowsze / nieinteraktywne Argumenty są po to, aby aplikacja pobierała najnowsze potrzebne pliki i aby działa bez interakcji użytkownika (nawet jeśli psexex działa z argumentem -i, ale działa bez -i oznacza, że ​​aplikacja po prostu się zawiesza i nic nie robi).
Vermin

Udało mi się zidentyfikować wiersz kodu, w którym wyjątek jest odrzucany, a po prostu uruchamia funkcję trzymaną w innej klasie w projekcie aplikacji, która działa dobrze, gdy nie działa z psexec
Vermin

@Vermin Mogę spróbować skopiować aplikację lokalnie i uruchomić ją z opcją -c, czy jest to również aplikacja zdalna i wszystkie komponenty na ścieżce systemowej?
KCotreau

0

Problem rozwiązany! Odkryłem, że aplikacja działająca na zdalnym komputerze PC przez psexec traci dane użytkownika, gdy aplikacja wywołuje procesy poza sobą, co oznacza, że ​​wszelkie wymagane uprawnienia zostały utracone.

Aby obejść ten problem, skończyłem konfigurować zaplanowane zadanie na zdalnym komputerze, na którym aplikacja żyje, aby uruchomić aplikację przy użyciu wymaganych poświadczeń użytkownika. Zadanie skonfigurowano tak, aby było uruchamiane raz, ale także skonfigurowane tak, aby można je było uruchomić ręcznie. Oznaczało to, że gdy aplikacja została uruchomiona przez zadanie, nie utracono żadnych uprawnień. Rozpocząłem zadanie za pomocą Psexec:

psexec \\remotemachine schtasks /run /tn "Task name"

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.