Autor Wątek: Problem z instalacją na Windows 7  (Przeczytany 5257 razy)

Offline Kos

  • Użytkownik
    • kos.gd

# Wrzesień 09, 2010, 13:27:07
Twierdzę tylko, że jeżeli instalator śmieci w tamtych miejscach, to sejwy w Moich Dokumentach niewiele zmieniają.

Instalatory nie śmiecą w tamtych miejscach, tylko z nich korzystają zgodnie z konwencjami systemu.
Moje Dokumenty są miejscem na dokumenty, a nie na sejwy czy inne dane aplikacji. Od sejwów jest AppData.


Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Dab

  • Redaktor
    • blog

# Wrzesień 09, 2010, 13:34:16
Pudło. Od Visty w górę poprawnym miejscem na sejwy jest My Documents\My Games.

Offline Kos

  • Użytkownik
    • kos.gd

# Wrzesień 09, 2010, 13:35:09
Pudło. Od Visty w górę poprawnym miejscem na sejwy jest My Documents\My Games.
Tak? Bez sensu ;d

Offline ConayR

  • Użytkownik

# Wrzesień 10, 2010, 02:33:07
Czytaj ze zrozumieniem -- ja nie mówię że zapisywanie plików do powyższych katalogów jest złe. Twierdzę tylko, że jeżeli instalator śmieci w tamtych miejscach, to sejwy w Moich Dokumentach niewiele zmieniają.
Aczkolwiek co do #1 to tak -- rozproszone pliki konfiguracyjne to _jest_ dużo lepsze rozwiązanie od centralnego rejestru :)
Pisałeś z przekąsem, ciężko było Twoją wypowiedź inaczej traktować. I nie, porozrzucane pliki nie są lepsze od centralnego miejsca. Przy okazji: danymi umieszczanymi w przeznaczonych do tego celu miejscach się nie śmieci. To co piszesz jest absolutnie nielogiczne.

Cytuj
No i znowu. To co proponujesz to cudowny samochód odporny na zderzenia z chilijskimi krowami. To że większość wypadków ma miejsce z udziałem innych zwierząt i samochodów, w dodatku najczęściej z innych stron świata już cię niewiele obchodzi.
Malware sobie znakomicie poradzi z zapisem do Program Files. Nawet gdyby musiało (ale ofc nie musi) pokazać użytkownikowi ekran UAC -- użytkownicy klikają w niego bez zastanowienia. Zresztą, jak mają nie klikać bez zastanowienia, skoro MS w całej swojej mądrości nie umieścił na tym ekranie informacji czemu właściwie ten ekran się pokazuje :D
Nie kwestionuję tego, że UAC wychodzi z błędnego założenia, że user wie w co kliknąć. Ale UAC jak i każde inne zabezpieczenie nie jest teh ultimate solution a sposobem na obronienie jeszcze kilku osób przed zrobieniem sobie ziaziu. Informacja "dlaczego pojawia się ekran" musi być dedukowana przez UAC. MS w swojej mądrości był świadom, że pozwolenie aplikacji na wpisanie powodu wywalenia promptu tylko sprawę mallware uprości. Win7 "deduka" ciut lepiej niż Vista. Wciąż jednak do perfekcji brakuje wiele. :)

Offline Dab

  • Redaktor
    • blog

# Wrzesień 10, 2010, 11:58:04
Cytuj
MS w swojej mądrości był świadom, że pozwolenie aplikacji na wpisanie powodu wywalenia promptu tylko sprawę mallware uprości.

Ale czemu aplikacji? To system powinien wiedziec, czemu aplikacja potrzebuje UAC. Przykladowo:
"SuperPuchateEmotki.exe chca nadpisac plik C:\Windows\System\kernel32.dll. Pozwolic?"
a tak -- pokazuje sie okienko i juz. Nawet najbardziej pro user nie wie co dokladnie program chce zrobic.

Offline Liosan

  • Redaktor

# Wrzesień 10, 2010, 12:00:45
Ale czemu aplikacji? To system powinien wiedziec, czemu aplikacja potrzebuje UAC. Przykladowo:
"SuperPuchateEmotki.exe chca nadpisac plik C:\Windows\System\kernel32.dll. Pozwolic?"
A to by po 3 dniach nie zmieniło się w "rundll32.exe chce nadpisać plik..." ?

Liosan

Offline Dab

  • Redaktor
    • blog

# Wrzesień 10, 2010, 12:10:12
To prawda, jezeli chodzi o malware to taki UAC niewiele pomoze. Natomiast czesto sciagam przykladowo jakas mala gierke kogos z warsztatu i na dzien dobry dostaje komunikat UAC. Chcialbym wiedziec czy to tylko ignoracja tworcy gry, czy tez probuje ona smiecic gdzie nie powinna.

Offline ConayR

  • Użytkownik

# Wrzesień 10, 2010, 12:32:55
Ale czemu aplikacji? To system powinien wiedziec, czemu aplikacja potrzebuje UAC. Przykladowo:
"SuperPuchateEmotki.exe chca nadpisac plik C:\Windows\System\kernel32.dll. Pozwolic?"
a tak -- pokazuje sie okienko i juz. Nawet najbardziej pro user nie wie co dokladnie program chce zrobic.
I uważasz, że to pomoże przeciętnemu użytkownikowi w podjęciu wyboru? :D Nie sztuka zarzucić użytkownika informacjami, których nie rozumie. ;) Poza tym UAC najczęściej nie dotyczy konkretnych akcji (X nadpisuje Y) a podniesienia uprawnień programu. Przy Twojej ziarnistości program antywirusowy odpalany z palca pytałby z prędkością gatling guna. ;)

Offline TrumpeT

  • Użytkownik

# Wrzesień 11, 2010, 19:20:38
Albo ShellExecuteEx z verb "runas":
http://blogs.msdn.com/b/vistacompatteam/archive/2006/09/25/771232.aspx

Nie bardzo rozumiem do czego służy ten "runas". Co on właściwie daje?

Offline ConayR

  • Użytkownik

# Wrzesień 11, 2010, 21:38:49
Informuje, że chcesz uruchomić program z innymi kredencjałami. Obiekty w Windows (m.in. procesy) mają swój security descriptor. SD opisuje uprawnienia obiektu i wpływa na dostęp do innych obiektów i komunikację ze światem. Proces odpalony przez inny proces dziedziczy SD rodzica. Jeśli chcesz uruchomić proces z innymi prawami niż te domyślnie dziedziczone, musisz uruchomić proces z innymi kredencjałami. Do tego służy run as.
« Ostatnia zmiana: Wrzesień 11, 2010, 21:41:20 wysłana przez ConayR »

Offline TrumpeT

  • Użytkownik

# Wrzesień 11, 2010, 23:02:38
Ok, to jeszcze takie pytanko:
z tego co wiem, niektóre programy wyświetlają te okienko (UAC prompt) przy instalacji, wyłącznie. A później już działają, aktualizują się itp. bez tego. To o wiele wygodniejsze, niż program ma wywalać te okienko przy każdym uruchomieniu, tak jak mam teraz. Jak tego dokonać?
« Ostatnia zmiana: Wrzesień 11, 2010, 23:09:16 wysłana przez TrumpeT »

Offline ConayR

  • Użytkownik

# Wrzesień 11, 2010, 23:06:22
z tego co wiem, niektóre programy wyświetlają te okienko (UAC prompt) przy instalacji, wyłącznie. A później już działają, aktualizują się itp. bez tego. To o wiele wygodniejsze, niż program ma wywalać te okienko przy każdym uruchomieniu, tak jak mam teraz. Jak tego dokonać?
Są dwie metody. Jedna: serwis. Dużo kodu. Druga: zmiana ACLs, ale nie polecam. W sumie to obu nie polecam. ;]

Offline TrumpeT

  • Użytkownik

# Wrzesień 11, 2010, 23:10:11
A zmiana uprawnień na katalog programu, przy instalacji (tak żeby nie wymagał praw administratora)? Można to łatwo zrobić ?

Offline bies

  • Użytkownik

# Wrzesień 11, 2010, 23:19:42
z tego co wiem, niektóre programy wyświetlają te okienko (UAC prompt) przy instalacji, wyłącznie. A później już działają, aktualizują się itp. bez tego. To o wiele wygodniejsze, niż program ma wywalać te okienko przy każdym uruchomieniu, tak jak mam teraz. Jak tego dokonać?
Są dwie metody. Jedna: serwis. Dużo kodu. Druga: zmiana ACLs, ale nie polecam. W sumie to obu nie polecam. ;]
Coś się zmieniło od Win2k3 Srv/Win2k8 Srv? Bo podstawowy szkielet usługi raptem pół setki linii kodu. W [1] jest bardzo rozbudowany przykład.

// edit
Gdyby ktoś myślał, że przesadzam to poniżej powinno zadziałać jako usługa.
#include <windows.h>
   
SERVICE_STATUS          ServiceStatus;
SERVICE_STATUS_HANDLE   hStatus;
   
void ControlHandler(DWORD request) {
    switch(request) {
        case SERVICE_CONTROL_STOP:   
        case SERVICE_CONTROL_SHUTDOWN:
   
            // ... handle stop ...
   
            ServiceStatus.dwWin32ExitCode = 0;
            ServiceStatus.dwCurrentState  = SERVICE_STOPPED;
            SetServiceStatus(hStatus, &ServiceStatus);
            return;
    }
    return;
}       
       
void ServiceMain(int, char**) {
    ServiceStatus.dwServiceType      = SERVICE_WIN32;
    ServiceStatus.dwCurrentState     = SERVICE_START_PENDING;
    ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN;
    ServiceStatus.dwWin32ExitCode    = 0;
    ServiceStatus.dwServiceSpecificExitCode = 0;
    ServiceStatus.dwCheckPoint       = 0;
    ServiceStatus.dwWaitHint         = 0;

    hStatus = RegisterServiceCtrlHandler("ServiceName", (LPHANDLER_FUNCTION)ControlHandler);
    if (hStatus == (SERVICE_STATUS_HANDLE)0) {
        return;
    }
    ServiceStatus.dwCurrentState = SERVICE_RUNNING;
    SetServiceStatus (hStatus, &ServiceStatus);

    // ... main service code ...
}   

int main() {
    SERVICE_TABLE_ENTRY ServiceTable[2];
    ServiceTable[0].lpServiceName = "ServiceName";
    ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;
                                   
    ServiceTable[1].lpServiceName = NULL;
    ServiceTable[1].lpServiceProc = NULL;

    StartServiceCtrlDispatcher(ServiceTable);
}

[1] http://msdn.microsoft.com/en-us/library/bb540476(VS.85).aspx
« Ostatnia zmiana: Wrzesień 11, 2010, 23:22:13 wysłana przez bies »

Offline ConayR

  • Użytkownik

# Wrzesień 12, 2010, 00:04:55
A zmiana uprawnień na katalog programu, przy instalacji (tak żeby nie wymagał praw administratora)? Można to łatwo zrobić ?
Przecież napisałem zmiana ACLs. :)

@bies: Napisać serwis to nie gigantyczny problem. Napisać go dobrze już jest trochę trudniej. Głównie przez to, że taki twór nie powinien robić coś non-stop, marnując zasoby ale też należy pamiętać, że dodatkowy serwis wydłuża czas ładowania systemu (chyba, że jest deferred jak stało się to możliwe bodaj w Viście). Poza tym instalacja serwisu wymaga nieco więcej pierdół w instalatorze i deinstalatorze. Serwis aktualizacyjny powinien być na tyle sprytny, że jeśli ktoś z palca usunie program to nie będzie na siłę go przywracał. Dobrze byłoby utrudnić ataki man in the middle...

Wszystko to składa się na trochę więcej kodu niż 50 linii, dużo więcej testowania a zysk dla użytkownika w tym konkretnym scenariuszu bardzo wątpliwy. Generalnie nie jestem zwolennikiem rzeźbienia serwisów do byle czego. A aktualizacja programu to właśnie takie byle co, IMO.
« Ostatnia zmiana: Wrzesień 12, 2010, 00:06:26 wysłana przez ConayR »