Po instalacji brak dostępu do dodawania\usuwania z bazy danych

0

witam
Napisałem aplikację, która działa z bazą danych w wpf. Podczas wykonywania aplikacji przy debugowaniu wszystko działa w porządku, ale po zainstalowaniu jej dane w bazie danych mogę tylko odświeżyć albo zobaczyć. Nie mogę natomiast usuwać\dodawać danych (przy debugowaniu aplikacji wszystkie te opcję działały bez zarzutu). Gdy chcę wykonać jakąś metodę po instalacji, która dodaje\usuwa z bazy danych program Od razu się wysypuje.
Czy możecie mi napisać dlaczego tak się dzieję ?

0

Co to znaczy że program sie wysypuje? Jaka jest treść wyjątku?

0

Cały opis błędu:

Podpis problemu:
  Nazwa zdarzenia problemu:	CLR20r3
  Podpis problemu: 01:	WpfApplication1.exe
  Podpis problemu: 02:	1.0.0.0
  Podpis problemu: 03:	56a92931
  Podpis problemu: 04:	System.Data
  Podpis problemu: 05:	4.6.81.0
  Podpis problemu: 06:	5584e985
  Podpis problemu: 07:	1a28
  Podpis problemu: 08:	5c
  Podpis problemu: 09:	System.Data.SqlClient.Sql
  Wersja systemu operacyjnego:	6.1.7601.2.1.0.256.1
  Identyfikator ustawień regionalnych:	1045
  Dodatkowe informacje 1:	2cc8
  Dodatkowe informacje 2:	2cc8936bfeb502ae2561307d885256d0
  Dodatkowe informacje 3:	1e1a
  Dodatkowe informacje 4:	1e1ac735cb9c6fef5d5e04ef374f1ede

Przeczytaj w trybie online nasze zasady zachowania poufności informacji:
  http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0415

Jeśli zasady zachowania poufności informacji w trybie online nie są dostępne, przeczytaj nasze zasady zachowania poufności informacji w trybie offline:
  C:\Windows\system32\pl-PL\erofflps.txt
 
0

Spróbuj reinstall frameworka .net.

0

niestety framework był w porządku ;d
A czy nie trzeba czegoś zmieniać w bazie jak tworzy się instalator czy może coś? Bo wszystko inne działa tylko jakby baza danych była readonly po instalacji

0

jednak miałem rację przy tworzeniu instalatora zmienia własności dostępu do pliku bazy przy użytkownikach z "pełnego dostępu" na "odczyt", "odczyt i wykonanie". Czy moglibyście mi podpowiedzieć jak zrobić żeby każdy użytkownik zawsze miał pełny dostęp do tego pliku?

Przepraszam za podwójny post

0

jak baze instalujesz do program files to sie nie dziw

0

@abrakadaber dzięki za info nie widziałem że tam zmienia się dostęp do plików.

Jakby ktoś miał podobny problem to poradziłem sobie w ten sposób:

  1. Stworzyłem plik manifest w projekcie i wrzuciłem do niego żeby aplikacja odpalała się jako administrator

  2. Dodałem metodę sprawdzającą czy wybrany prze zemnie plik ma pełen dostęp. Jeśli nie wykonywana jest metoda z pkt 3. Jeśli tak pomijane jest wykonywanie tej metody

  3. Dodałem metodę zmieniającą w pliku dostęp na pełen:

        public static void FullAccesToFile(string fileName)
        {
            DirectoryInfo fileInfo = new DirectoryInfo(Directory.GetCurrentDirectory() + "\\" + fileName);
            DirectorySecurity fileSecurity = fileInfo.GetAccessControl();
            fileSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow));
            fileInfo.SetAccessControl(fileSecurity);
        }
  1. Po wykonaniu tej metody zmieniłem zawartość pliku manifest tak, żeby aplikacja nie odpalała się już jako administrator.

Wszystko w bloku try catch na wypadek gdyby ktoś zmienił dostęp do tego pliku (w catch zawartość pliku manifest jest zmieniona na uruchamianie jako administrator, wypisuje w msg boxie, że należy uruchomić aplikację ponownie i aplikacja jest zamykana. Dzięki temu przy kolejnym uruchomieniu programu kolejny raz wykonywana jest metoda zmieniająca dostęp do pliku.

Jeszcze powinno być sprawdzanie czy plik, w którym chcemy zmienić dostęp w ogóle istnieje.

Może komuś się przyda.

2

To jest jakies rozwiazanie ale nie najlepsze. Co to za baza ze trzymasz ja razem z plikami programu? Lepsza praktyka jest zalozenie swojego katalogu w %appdata% i tam trzymanie wszystkich plikow na ktorych pracuje aplikacja

3

ja bym nawet napisał, że to nie jest rozwiązanie. Pliki powinny być tam, gdzie ich miejsce a PF to nie jest miejsce na pliki robocze

1

Nawet jak pliki się instaluje do folderu ProgramData, to w instalatorze stworzonym chociażby przez Wix'a domyślnie są podczas instalacji ustawiane prawa tylko do odczytu i wykonania na pliku, aby umożliwić zapis trzeba explicite podnieść uprawnienia w instalatorze dla pliku. Więc kluczową kwestią jest jakiej technologi używasz do stworzenia instalatora i czy/jak w niej podnieść uprawnienia dla danego pliku,

0

dzięki za odpowiedzi dodałem bazę do folderu aplikacji w appdata i wszystkie prawa dostępu są ok :).
A jeszcze chciałem się was zapytać czy każdy użytkownik takiej aplikacji musi mieć zainstalowany sql server, który zajmuje ogromną ilość miejsca ?
Czy istnieje możliwość instalacji wyłącznie jakiegoś małego programu wyłącznie do obsługi takiej bazy (przez użytkownika aplikacji)?

0

ale z tego co piszesz wynika, że używasz najprawdopodobniej wersji SQL Server Compact i tam się nic nie instaluje - to jest jeden plik bazy .sdf

0

Jest to baza danych mdf

0

no to tym bardziej - jest to baza ms access i tam nic nie trzeba instalować

1

Jeżeli baza używa silnika sql to każdy użytkownik ma do niej dostęp via serwis sql serwera. I tylko sql Server korzysta z pliku mdf

1 użytkowników online, w tym zalogowanych: 0, gości: 1