Forum Użytkownikow Subiekt GT
InsERT GT => Dodatki - zestawienia - sfera => Wątek zaczęty przez: night w Maj 22, 2018, 06:37:39
-
Uszanowanie,
problem następujący; nie jestem w stanie uruchomić Subiekta przez Sferę, gdy próbuję to zrobić przez usługę systemową (windows service). Z aplikacji okienkowej działa elegancko.
Na forum znalazłem nieco odległy od tematu wątek nt. ASP .NET. Próbuję następującej składni:
Thread watekSubiekta = new Thread(() =>
{
insertGT.polacz();
SuDokument dokFS;
[..]
});
watekSubiekta.SetApartmentState(ApartmentState.STA);
watekSubiekta.Start();
}
Jakkolwiek dostaję jedynie błąd w logu:
Opis: proces został przerwany z powodu nieobsłużonego wyjątku.
Informacje o wyjątku: System.Runtime.InteropServices.COMException
w InsERT._GT.Uruchom(Int32, Int32)
w usluga1.insertGT.polacz()
w usluga1.klasaX+<>c__DisplayClass2_0.<metodaY>b__1()
w System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
w System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
w System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
w System.Threading.ThreadHelper.ThreadStart()
Wszystko wywala się w miejscu, gdy w klasie insertGT wykonywane jest:
sgt = (Subiekt)gt.Uruchom((int)UruchomDopasujEnum.gtaUruchomDopasuj, (int)UruchomEnum.gtaUruchomWTle | (int)UruchomEnum.gtaUruchom);
Gorąca prośba o pomoc.
PS: bez zamykania procesu Subiekta w wątku STA, błędu nie ma... działania też nie.
-
Na jakim użytkowniku jest uruchamiana ta usługa ?
-
Próbowałem różnie. Obecnie: Usługa Sieciowa
-
Czyli zgaduję dalej... Mam rozumieć, że na użytkowniku, na którym "działa elegancko" i z widocznym interfejsem również ?
-
Edit. Nic nie mówiłem, faktycznie usługa powinna pracować z kontem użytkownika.
Dziękuję i pozdrawiam
Dla potomnych: Visual Studio CTRL+ALT+P pozwala na debugowanie usług. :)
Pozdrawiam!
-
Nie chce otwierać nowego tematu więc piszę tutaj.
Otóż mam identyczny problem. Uruchamiam usługę na użytkowniku (zgodnie z zaleceniem). Uruchamiam także w oddzielnym wątku STA (tak jak w pierwszym poście) i dalej nic.
0xFFFFFFFF
w InsERT.GTClass.Uruchom(Int32 TypDopasowania, Int32 TypUruchomienia)
w SubiektConnect.MyInsert.<>c__DisplayClass9_0.<run>b__0()
Mój kod
Thread watekSubiekta = new Thread(() =>
{
System.IO.File.AppendAllText(@"SubiectConnectLog.txt", "Uruchomiłem wątek\n");
GT gt = new InsERT.GT();
gt.Produkt = ProduktEnum.gtaProduktSubiekt;
gt.Baza = MyInsert.databaseName;
gt.Serwer = MyInsert.datasource;
Subiekt subiekt;
try
{
if (MyInsert.user != null && MyInsert.user.Length > 0)
{
gt.Autentykacja = AutentykacjaEnum.gtaAutentykacjaMieszana;
gt.Uzytkownik = MyInsert.user;
gt.UzytkownikHaslo = MyInsert.pass;
}
else
gt.Autentykacja = AutentykacjaEnum.gtaAutentykacjaWindows;
subiekt = (Subiekt)gt.Uruchom((int)InsERT.UruchomDopasujEnum.gtaUruchomDopasuj, (int)InsERT.UruchomEnum.gtaUruchom);
}
catch (Exception ex)
{
System.IO.File.AppendAllText(@"Log.txt", "Błąd\n" + ex.Message + "\n" + ex.StackTrace);
// int num = (int)MessageBox.Show(ex.Message, "Wystąpił błąd", MessageBoxButtons.OK);
}
...
});
watekSubiekta.SetApartmentState(ApartmentState.STA);
watekSubiekta.Start();
Czy ktoś z Was ma pomysł dlaczego?
-
Co to znaczy "nic" ? Jest generowany jakiś wyjątek czy nie ? Jeśli tak to w którym miejscu (linii kodu) ? To co na szybko zauważyłem to NIE zastosowanie się do zaleceń i przykładów z tego wątku - dlaczego uruchamiasz program z interfejsem użytkownika - przecież jeśli program będzie czekał na interakcję z użytkownikiem (na przykład na podanie poprawnego hasła) to uzyskasz efekt zawieszonego programu ? Dlaczego nie zamykasz programu ?
-
Co to znaczy "nic" ? Jest generowany jakiś wyjątek czy nie ? Jeśli tak to w którym miejscu (linii kodu) ? To co na szybko zauważyłem to NIE zastosowanie się do zaleceń i przykładów z tego wątku - dlaczego uruchamiasz program z interfejsem użytkownika - przecież jeśli program będzie czekał na interakcję z użytkownikiem (na przykład na podanie poprawnego hasła) to uzyskasz efekt zawieszonego programu ? Dlaczego nie zamykasz programu ?
Bardzo dziękuję za szybką odpowiedź. Leci wyjątek w linii przy uruchamianiu(gt.Uruchom()):
HRESULT: 0x8004132B
w InsERT.GTClass.Uruchom(Int32 TypDopasowania, Int32 TypUruchomienia)
w SubiektConnect.MyInsert.<>c__DisplayClass9_0.<run>b__0()
Uruchamiam jak kolega w pierwszym poście. zmieniłem na opcję UruchomEnum.gtaUruchomWTle:
subiekt = (Subiekt)gt.Uruchom((int)InsERT.UruchomDopasujEnum.gtaUruchomDopasuj, (int)InsERT.UruchomEnum.gtaUruchomWTle);
niestety bez zmian. Ten sam wyjątek w tej samej linii.
-
Dlaczego nie sprawdziłeś co oznacza zacytowany komunikat błędu ?
-
Dlaczego nie sprawdziłeś co oznacza zacytowany komunikat błędu ?
Dzięki - poprzednio miałem bład 0xFFFFFFFF, po zmianie na uruchamianie w tle nie zauważyłem zmiany numerku. Już sobie poradziłem. Dzięki za pomoc.