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ę ?
Co to znaczy że program sie wysypuje? Jaka jest treść wyjątku?
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
Spróbuj reinstall frameworka .net.
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
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
jak baze instalujesz do program files to sie nie dziw
@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:
-
Stworzyłem plik manifest w projekcie i wrzuciłem do niego żeby aplikacja odpalała się jako administrator
-
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
-
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);
}
- 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.
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
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
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,
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)?
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
Jest to baza danych mdf
no to tym bardziej - jest to baza ms access i tam nic nie trzeba instalować
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