2010-12-19 13 views
6

Wiem, że commonappdata (Wszyscy użytkownicy) może zawierać systemowe ustawienia aplikacji, ale w systemie Vista/7 niedozwoleni użytkownicy nie mogą zapisywać do tego katalogu.Czy w systemie Windows znajduje się folder współdzielony, do którego użytkownicy nieposiadający uprawnień mają dostęp do zapisu?

Czy istnieje folder współdzielony przez użytkowników i każdy użytkownik bez uprawnień administratora może do niego pisać?

Oto dlaczego potrzebuję tego: Moja aplikacja jest instalowana w katalogu PF przez instalator Inno Setup z podwyższonymi uprawnieniami. Następnie, gdy rzeczywisty użytkownik nieadministracyjny uruchamia program, kopiuje on swoje ustawienia do katalogu AppData użytkownika przy użyciu innego instalatora Inno Setup, innego niż podniesiony. Po odinstalowaniu programu (zainicjowanego przez systemowy instalator z prawami administratora) chcę odinstalować pliki programu z katalogu AppData każdego użytkownika.

mogę myśleć o dwóch rozwiązań: 1. Uzyskanie listy użytkowników Windows i iteracja swoich katalogów AppData (wydaje się zbyt skomplikowane) 2. Zapisywanie ścieżki do uninstallers w wyżej wymienionym katalogu danych wspólny użytkownika.

Wszelkie pomysły?

Dzięki!

Odpowiedz

0

Rozwiązanie 1 wydaje mi się całkiem rozsądne. Tak więc każdy użytkownik kontroluje swoją i tylko swoją instalację, a Ty kontrolujesz centralną współdzieloną instalację.

Dla rozwiązania 2 można utworzyć folder dozwolonego zapisu w dobrze zdefiniowanej lokalizacji, tak aby instalator o tym wiedział, lub użyć klucza rejestru w tym samym celu. Należy jednak pamiętać, że może to spowodować lukę w zabezpieczeniach, ponieważ każdy może manipulować ścieżkami deinstalacji innych użytkowników.

+0

Ale jak mam realizować rozwiązanie 2? Gdzie jest ścieżka pod Windows, która jest niezależna od katalogów userappdata, a normalni, nieukierunkowani użytkownicy mają do niej prawo zapisu? – Steve

+0

Twój instalator, który działa z uprawnieniami administratora, może_ tworzyć takie foldery, ma do tego wystarczające uprawnienia. Prawdopodobnie musi to być podfolder gdzieś w zwykłym folderze instalacyjnym (admin-run). – 9000

+0

Czy możesz wskazać mi gdzieś, gdzie wyjaśniają, jak to zrobić w praktyce? Przypuszczam, że nawet jeśli to zrobię, instalator będzie musiał iterować po wszystkich kontach użytkowników i przyznawać im uprawnienia jeden po drugim? :-) – Steve

1

Czy rzeczy w C: \ Users \ Public \ kwalifikują się do tego, czego potrzebujesz?

+1

Czy to nie jest dostępne tylko w systemie Vista i nowszych wersjach? Potrzebuję też rozwiązania dla XP! – Steve

+0

@Steve: Wierzę, że XP ma folder Udostępnione dokumenty w Moim komputerze, nie wiem, jaka jest pełna ścieżka do niego. Jest przeznaczony do uzyskiwania dostępu lokalnego dla wielu użytkowników. –

4

"Dokumenty udostępnione" Directory w Windows XP

C:\Documents and Settings\All Users\Documents 

Albo

%ALLUSERSPROFILE%\Documents 

odpowiedniego katalogu w systemie Windows Vista/7

C:\Users\Public 

Albo

%PUBLIC%\Documents 

Ale to, czego naprawdę szukasz, to wartość KNOWNFOLDERID o wartości FOLDERID_PublicDocuments (starsza wersja: CSIDL_COMMON_DOCUMENTS). Funkcja SHGetFolderPath może następnie wyznaczyć ścieżkę.

Albo łatwiej VBScript alternatywą, ale nie jestem pewien, jak to jest po drugiej stronie niezawodny wersjach OS:

Const CSIDL_COMMON_DOCUMENTS = &h2e 
Set oShell = CreateObject("Shell.Application") 
Wscript.Echo oShell.Namespace(CSIDL_COMMON_DOCUMENTS).Self.Path 

myślę NameSpace nie akceptuje tego konkretnego constant. Możesz więc wziąć COMMONAPPDATA = &H23, a następnie użyć rodzica.Ale to nie jest bardzo czysty lub zinternacjonalizowany:

Wscript.Echo oShell.NameSpace(&h23).ParentFolder.Self.Path & "\Documents" 

ale skoro używasz Inno Setup, to powinien być naprawdę używając {commondocs} Shell Folder Constant i ułatwiają dla siebie.

1

Użytkownik jest właścicielem folderu dokumentu. Z wyjątkiem plików do skopiowania, przeniesienia, usunięcia lub edycji innym programem, jeśli coś tam umieścisz, ze względu na widoczność dla użytkownika.

Proponuję utworzyć folder w ramach wspólnych danych aplikacji (CSIDL_COMMON_APPDATA lub FOLDERID_ProgramData) w twoim instalatorze z deskryptorem zabezpieczeń, który umożliwia wszystkim dostęp.

E.g.

[Dirs] 
Name: "{commonappdata}\productname";Permissions:everyone-modify; 
Powiązane problemy