• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Eksport programu w Visual Studio

VPS Starter Arubacloud
0 głosów
1,549 wizyt
pytanie zadane 15 lutego 2016 w C# przez pulpet112 Użytkownik (760 p.)
Witam!

Stworzyłem dosc prostą aplikacje w środowisku Visual Studio 2012 for Windows Desktop. Gdy uruchamiam ją w VS to wszystko oczywiście śmiga. Eksport wykonałem za pomocą okna 'Properties' i 'Publish Now' w tym projekcie.

Po eksporcie wszystko działa, tzn program uruchamia się i pojawia się pierwszy panel (logowanie). Jednak dalej już sobie nie poszaleję gdyż nie mogę ani się zalogwać ani stworzyć nowego użtykownika. Serializacja uzytkownikow ( i ogolnie wszystkiego w tym programie) polega na zapisie do plikow binarnych. W momencie gdy naciskam buttony ktore w swoich zdarzeniach maja serializacje, program przestaje działać i zostaje wyświetlony komunikat o nieobslugiwanym wyjatku.

No i wlasciwie nie wiem co robic... Nie jest to moja pierwsza aplikacja, ale nigdy wczesniej jakos nie interesowalo mnie eksportowanie gotwego programu. Zastanawiam sie, jak w ogole wyglada serializacja binarna w gotowym programie... gdzie te pliki sie tworza i czy w ogole sie tworza?? To jest naprawdopodobnej przyczyna mojego problemu.

Ktos wie cos na ten temat??

Z gory dzieki wielkie

2 odpowiedzi

0 głosów
odpowiedź 15 lutego 2016 przez drek Gaduła (4,980 p.)

W momencie gdy naciskam buttony ktore w swoich zdarzeniach maja serializacje, program przestaje działać i zostaje wyświetlony komunikat o nieobslugiwanym wyjatku.

To może warto zacząć od przeczytania tego wyjątku i zrozumienia dlaczego ten wyjątek się pojawia?

Serializacja uzytkownikow ( i ogolnie wszystkiego w tym programie) polega na zapisie do plikow binarnych

Zastanawiam sie, jak w ogole wyglada serializacja binarna w gotowym programie.. gdzie te pliki sie tworza i czy w ogole sie tworza

Nie rozumiem tych dwóch zdań. Myślę, że serializacja binarna w gotowym programie wygląda nastęþująco: "Serializacja uzytkownikow ( i ogolnie wszystkiego w tym programie) polega na zapisie do plikow binarnych.". A pliki myślę, że się Tworzą tam gdzie je zapisujesz (piszesz, że Twój program zapisuje dane do plików), więc pewnie dane te znajdują się w plikach. Jeśli nie masz pewności czy pliki istnieją, to zawsze możesz to sprawdzić (możesz przecież przeglądać katalogi na swoim komputerze - prawda?)

 

Proponuję przeredagować Twoje pytanie, bo z całym szacunkiem, ale nie rozumiem z czym masz problem. Nie umieściłeś treści wyjątków, nie dałeś przykładowego kodu. Krążysz w około a nie wiadomo w ogóle o co chcesz zapytać. Zastanów się i przemyśl gdzie masz problem a następnie zapytaj umieszczając jak najwięcej szczegółowych informacji.

komentarz 15 lutego 2016 przez pulpet112 Użytkownik (760 p.)

To może warto zacząć od przeczytania tego wyjątku i zrozumienia dlaczego ten wyjątek się pojawia?

Gdybym wiedzial dlaczego sie pojawia to bym przeciez nie pisal do madrzejszy ode mnie ;)

Treść błędu ktory się wtedy pojawia:

************** Tekst wyjątku **************
System.NullReferenceException: Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu.
   w dziennik.Form1.zaloguj_Click_1(Object sender, EventArgs e)
   w System.Windows.Forms.Control.OnClick(EventArgs e)
   w System.Windows.Forms.Button.OnClick(EventArgs e)
   w System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   w System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   w System.Windows.Forms.Control.WndProc(Message& m)
   w System.Windows.Forms.ButtonBase.WndProc(Message& m)
   w System.Windows.Forms.Button.WndProc(Message& m)
   w System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   w System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   w System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Zestawy załadowane **************
mscorlib
    Wersja zestawu: 4.0.0.0
    Wersja Win32: 4.6.96.0 built by: NETFXREL2STAGE
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
dziennik
    Wersja zestawu: 1.0.0.0
    Wersja Win32: 1.0.0.0
    CodeBase: file:///C:/Users/pulpet112/AppData/Local/Apps/2.0/358VHOVH.VOE/N5LMKGNV.TN5/dzie..tion_e428afe32e1620b2_0001.0000_e674293760f25829/dziennik.exe
----------------------------------------
System.Windows.Forms
    Wersja zestawu: 4.0.0.0
    Wersja Win32: 4.6.81.0 built by: NETFXREL2
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    Wersja zestawu: 4.0.0.0
    Wersja Win32: 4.6.81.0 built by: NETFXREL2
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    Wersja zestawu: 4.0.0.0
    Wersja Win32: 4.6.1068.2 built by: NETFXREL3STAGE
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration
    Wersja zestawu: 4.0.0.0
    Wersja Win32: 4.6.81.0 built by: NETFXREL2
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Core
    Wersja zestawu: 4.0.0.0
    Wersja Win32: 4.6.81.0 built by: NETFXREL2
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Xml
    Wersja zestawu: 4.0.0.0
    Wersja Win32: 4.6.1064.2 built by: NETFXREL3STAGE
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
mscorlib.resources
    Wersja zestawu: 4.0.0.0
    Wersja Win32: 4.0.30319.33440 built by: FX45W81RTMREL
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_pl_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------
System.Windows.Forms.resources
    Wersja zestawu: 4.0.0.0
    Wersja Win32: 4.0.30319.36213 built by: FX452RTMLDR
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_pl_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------

A pliki myślę, że się Tworzą tam gdzie je zapisujesz (piszesz, że Twój program zapisuje dane do plików), więc pewnie dane te znajdują się w plikach. Jeśli nie masz pewności czy pliki istnieją, to zawsze możesz to sprawdzić (możesz przecież przeglądać katalogi na swoim komputerze - prawda?)

I po raz kolejny, nie wiem gdzie się tworzą, nigdzie ich nie widze - gdyby bylo inaczej to tez bym nie pytal ;-) Moze w ogole sie nie tworza i stad wynika powyzszy blad. Chodzi o to, ze gdy odpalam program przez VS to wszystko dziala, pliki sie tworza gdy ich nie ma, a gdy sa - dane sie odczytuja. Slowem - wszystko tak jak chce, no ale po eksporcie juz nic nie jest tak jak chce i stad moje pytanie... 

komentarz 16 lutego 2016 przez adrian17 Ekspert (344,100 p.)

połowa tego co wrzuciłeś jest niepotrzebne, wystarczył call stack. Pokaż zawartość zaloguj_Click_1 albo i reszty kodu.

I po raz kolejny, nie wiem gdzie się tworz

A kto ma wiedzieć? To Ty podajesz ścieżkę pliku.

 Eksport wykonałem za pomocą okna 'Properties' i 'Publish Now' w tym projekcie.

Jeśli to proste aplikacje i nie masz miliona zależności i potrzeby instalatora, to jest znacznie łatwiejszy sposób - przekopiować skompilowany program (.exe, .exe.config, .exe.manifest) z folderu projektu i tyle.

komentarz 16 lutego 2016 przez pulpet112 Użytkownik (760 p.)
private void zaloguj_Click_1(object sender, EventArgs e)
        {
            try
            {
                ulista = Serializacja<UzLista>.Deserialize("uzytkownicy.bin");
                if (ulista.CzyIstnieje(textBox1.Text, textBox2.Text))
                    tabControl1.SelectTab(tabPage2);
                else
                    MessageBox.Show("Podany użytkownik nie istnieje");

            }
            catch (Exception)
            {
                MessageBox.Show("Blad");
                throw;
            }
        }

 

'ulista' to obiekt klasy ktora zawiera List<Uzytkownik> z listą wszystkich uzytkownikow.

 

Jeśli to proste aplikacje i nie masz miliona zależności i potrzeby instalatora, to jest znacznie łatwiejszy sposób - przekopiować skompilowany program (.exe, .exe.config, .exe.manifest) z folderu projektu i tyle.

Wiem, ze mozna tak zrobic ale niestety na innym komputerze już ten sposób nie zadziałał wiec potrzebuje to zrobic inaczej. Z reszta to bez znaczenia, chciałbym po prostu wiedzieć jak się to robi. 

A kto ma wiedzieć? To Ty podajesz ścieżkę pliku.

Ścieżka jest najprostrza z mozliwych, czyli folder w ktorym znajduje sie program. Tam pliki się nie tworza wiec pomyslalem, ze moze po eksporcie to jakos inaczej wyglada. Skoro nie, to rowniez nie wiem czemu sie nie tworza, skoro po odpaleniu z VB się tworza... 

komentarz 16 lutego 2016 przez adrian17 Ekspert (344,100 p.)
Błąd omija try/catcha czy jest łapany?

pewnie Deserialize coś wywala, nie mogę powiedzieć nic konkretnego bo nie wiem jaka to klasa więc nie mogę zobaczyć jej dokumentacji.
komentarz 16 lutego 2016 przez pulpet112 Użytkownik (760 p.)

Nie wiem czy samo pisanie na tym forum cos pomaga ale mi pomogło ;) Wyeksportowalem jeszcze raz i nie wiadomo czemu.... działa ;) Pokazuje sie na poczatku MessageBox ze nie znaleziono plikow binarnych i ze zostana utworzone. I faktycznie sie tworza i cala reszta programu dziala bez zarzutu! 

Co ciekawe, w ogole nie moge znaleźć tych binarnych plikow. Musialy sie gdzies stworzyc przy pierwszym odpaleniu gdyz po kazdym kolejnym uruchomieniu nie informuje o braku plikow no i oczywiscie wszystkie dane zostaja zachowane. 

Zastanawiam sie teraz tylko nad tym, w jaki sposób wyeksportowac ten program tak, aby powstal mi jeden plik. Oto co powstaje z wykorzystaniem PROJECT -> Propeties -> Publish -> Publish Now :

Program odpalam przez 'setup' i działa ale przeniesienie tego pliku w inna lokalizacje skutkuje wyswietleniem komunikatu o niemozliwosci pobrania aplikacji. Czy mam rozumiec ze ten program jest gdzies wyekspotowany online?? W jaki sposób wykonać eksport, aby otrzymac tylko 1 plik??

komentarz 16 lutego 2016 przez drek Gaduła (4,980 p.)

W jaki sposób wykonać eksport, aby otrzymac tylko 1 plik??

Nie odpowiem na Twoje pytanie, bo nie znam odpowiedzi. Ale użyłem googli aby znaleźć odpowiedź na pytanie jak stworzyć pojedynczy plik exe dla aplikacji napisanej w .necie.

https://stackoverflow.com/questions/3261942/net-whole-application-as-a-single-exe-file

https://stackoverflow.com/questions/189549/embedding-dlls-in-a-compiled-executable

Mam nadzieję, że przydadzą Ci się zaprezentowane rozwiązania.

0 głosów
odpowiedź 16 lutego 2016 przez pulpet112 Użytkownik (760 p.)
hmm.. na prawde nikt nie chce powiedziec o co moze tutaj chodzic??

Podobne pytania

0 głosów
1 odpowiedź 930 wizyt
pytanie zadane 11 stycznia 2020 w C# przez assassin Gaduła (3,260 p.)
0 głosów
0 odpowiedzi 194 wizyt
pytanie zadane 11 marca 2019 w C# przez jakubjordanek Obywatel (1,320 p.)
0 głosów
1 odpowiedź 189 wizyt
pytanie zadane 2 czerwca 2018 w C# przez DODO Bywalec (2,950 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...