2010-10-13 12 views
6

Mam zbudować program w Visual Studio. Program tworzy plik dziennika i zapisuje go podczas działania programu. Dlatego skonstruowałem instalator (setup-project), który powinien ustawić prawa zapisu dla mojego folderu programu, niezależnie od tego, który użytkownik pracuje z programem. aktualnie wygląda tak:Ustaw uprawnienia do zapisu dla wszystkich użytkowników dla mojego folderu programu

// ... 
} 
    InitializeComponent(); 

    string folder = Directory.GetCurrentDirectory(); 

    DirectorySecurity ds = Directory.GetAccessControl(folder); 
    ds.AddAccessRule(new FileSystemAccessRule("Everyone", //Everyone is important 
                //because rights for all users! 
    FileSystemRights.Read | FileSystemRights.Write, AccessControlType.Allow)); 
} 
// ... 

w ciągu ostatnich dwóch rzędach dostaję System.SystemException: „Die Vertrauensstellung zwischen der primären Domane und der vertrauenswürdigen Domäne könnte nicht hergestellt werden.”

[TŁUMACZENIE: „The nie można ustanowić relacji zaufania między domeną podstawową a domeną zaufaną "]

StackTrace brzmi tak:.

bei System.Security.Principal.NTAccount.TranslateToSids(IdentityReferenceCollection sourceAccounts, Boolean& someFailed) 
bei System.Security.Principal.NTAccount.Translate(IdentityReferenceCollection sourceAccounts, Type targetType, Boolean& someFailed) 
bei System.Security.Principal.NTAccount.Translate(IdentityReferenceCollection sourceAccounts, Type targetType, Boolean forceSuccess) 
bei System.Security.Principal.NTAccount.Translate(Type targetType) 
bei System.Security.AccessControl.CommonObjectSecurity.ModifyAccess(AccessControlModification modification, AccessRule rule, Boolean& modified) 
bei System.Security.AccessControl.CommonObjectSecurity.AddAccessRule(AccessRule rule) 
bei System.Security.AccessControl.FileSystemSecurity.AddAccessRule(FileSystemAccessRule rule) 

Masz pomysł, co mogę zrobić? dziękuje

+4

Czy wykonałeś swój instalator z uprawnieniami administracyjnymi? – Dennis

+3

Należy zauważyć, że istnieje powód dla różnych folderów publicznych w danym systemie do przechowywania danych programu ... – NotMe

+0

O, Myślałem, że wykonanie instalatora z przywilejami administracyjnymi jest ustawieniem domyślnym. Gdzie mogę tego szukać? We właściwościach mojego projektu instalacji nie mogę tego znaleźć. – Rotaney

Odpowiedz

3

Być może najlepszą odpowiedzią nie jest to, o co prosiłeś. Jest dobry powód, aby nie zapisywać w katalogu plików programu. Dane dziennika w szczególności są przejściowe i nie powinny być tutaj zapisywane.

O wiele lepiej jest zapisać dane dziennika w katalogu określonym przez zmienną środowiskową TEMP. Jeśli to zrobisz, zaoszczędzisz użytkownikom kilku kłopotów i uniemożliwisz im przeklinanie oprogramowania w przyszłości. Proszę sprawdzić tę odpowiedź, która obejmuje ten sam temat:

Allow access permission to write in Program Files of Windows 7

0

Ten previously asked question powinien skierować Cię we właściwym kierunku. Zasadniczo potrzebujesz NOT, aby każdy użytkownik zapisał do folderu Program Files. UAC, bezpieczeństwo i inne środki są po to, aby próbować temu zapobiec w jak największym stopniu.

Zasadniczo, jeśli potrzebujesz pojedynczego pliku, który zostanie zapisany przez wszystkich użytkowników, będziesz potrzebować go w folderze ProgramData, dostępnym przez %ALLUSERSPROFILE%, zamiast tymczasowego folderu poszczególnych użytkowników, który jest zdecydowanie tym, czego potrzebujesz zrobić z plikiem dziennika. Pamiętaj, że zawartość folderu tymczasowego powinna być traktowana jako niestabilna i może zostać usunięta w dowolnym momencie, na przykład przez Kreatora oczyszczania dysku.

3

Nie brakuje Ci stwierdzenia, w którym rzeczywiście ustawiasz kontrolę dostępu z powrotem do katalogu?

Directory.SetAccessControl(Directory.GetCurrentDirectory(), ds); 
Powiązane problemy