Usuwanie pliku po restarcie a prawa admina

Usuwanie pliku po restarcie a prawa admina
KA
  • Rejestracja:ponad 19 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Gorlice
0

Piszę program (a właściwie jego część - Update) i mam problem z tym że przewiduję przypadek w którym Update.exe będzie musiał zaktualizować samego siebie. Wiadomo uruchomionego programu nie da się usunąć ale można zmienić jego nazwę to załatwia sprawę podmiany ale nie do końca bo zostanie mi plik dajmy na to Update.exe.tmp.
Teoretycznie mógłbym wywołać MoveFileEx z parametrem MOVEFILE_DELAY_UNTIL_REBOOT i sprawa załatwiona ale nie mogę bo co jeżeli aplikacja będzie zainstalowana w folderze gdzie potrzebne są prawa admina? Update.exe nie ma praw admina nadanych od początku działania (manifest) i tylko wtedy gdy aktualizacja jest dostępna (jeżeli trzeba) prosi użytkownika o ich nadanie. To załatwiłem w taki sposób że pliki są kopiowane poprzez IFileOperation (ten interfejs pozwala na podniesienie dla niego uprawnień ale nie pozwala na takie coś jak wspomniana funkcja MoveFileEx).
Pytanie jak pozbyć się tego tymczasowego pliku Update.exe.tmp jeżeli znajduje się w folderze do którego dostęp wymaga praw admina. Mogła by go usuwać sama aplikacja która uruchamia się po aktualizacji ale przecież 2 razy (pierwszy raz Update.exe) z kolei nie będzie prosić o nadanie praw admina.
Jakieś wpisy w rejestrze i uruchamianie skryptów przy starcie systemu też raczej odpada bo skrypt bez praw admina też nic nie zrobi... Naprawdę trochę nad tym siedzę, w Google szukać chyba nie umiem (są różne sposoby ale nie załatwiają sprawy gdy potrzeba praw admina) albo już za długo siedzę bo nic nie widzę i nie umiem wymyślić. Może ktoś już coś z tym kombinował. Proszę o podpowiedzi.
PS: Nie zamieszczam żadnego kodu bo nie ma czego.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
olesio
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
1

A czy moduł updateujący nie mógłby się zapisywać z zasobów głównego programu i wywoływać z lokalizacji gdzie chyba zawsze masz prawa zapisu jak %Temp%. No chyba, że tam też nie zawsze się da usuwać. Pewnie ktoś doradzi tutaj coś lepszego.


Pozdrawiam.
KA
  • Rejestracja:ponad 19 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Gorlice
0

Racja by było by jakieś rozwiązanie nawet nie musiałby być w zasobach bo skopiować plik Update.exe z folderu do którego potrzeba uprawnień (np. Program Files) do Temp chyba mogę bez problemu a tam chyba mogę bez uprawnień usuwać pliki to teoretycznie wszystko było by ok (że sam na to nie wpadłem!!!). Jak nikt nie wymyśli coś lepszego to tak zrobię. Wada jest taka, że wymagało by to podawania i/lub zapisywania gdzieś lokalizacji głównego programu (to już nie problem) ale może ktoś wymyśli coś lepszego. Dzięki.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
olesio
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
0

Spoko, o ile nie ma jakichś udziwnień w tej kwestii. Bo ciekawe czy jeśli poprzez rejestr lub zmienną środowiskową przestawimy na próbę ścieżkę dla tempa na Program Filea, to czy UAC nie będzie się czepiać zapisu do tej lokalizacji. Ponoć UAC można wyłączyć poprzez rejestr, do następnego restartu. Także luki w bezpieczeństwie pewnie są, ale niestety takie czasy że systemy idą w stronę bajerów wizualnych i upierdliwych mechanizmów robiących z usera idiotę. A według mnie powinno się stawiać na prostotę i funkcjonalność.


Pozdrawiam.
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:minuta
  • Lokalizacja:Tuchów
  • Postów:12154
0

@kAzek - mimo wszystko poleciłbym kombinowanie z katalogami, do modyfikacji których nie potrzeba uprawnień administratora; Nie ingeruj też w działanie UAC - nie wydaje mi się to rozsądnym posunięciem; Niestety nie znam zbyt dobrze UAC więc dokładnie nie wiem na co pozwoli, a na co nie - trzeba by o tym nieco poczytać;

Ewentualnie możesz pokombinować w ten sposób, że to aplikacja główna usuwa plik tymczasowy (mając stosowne uprawnienia) podczas rozruchu (jeśli ten plik istnieje); Wiele czasu na tym się nie straci;


olesio napisał(a)

Ponoć UAC można wyłączyć poprzez rejestr, do następnego restartu.

Ja jako użytkownik takiego programu byłbym bardzo niezadowolony, gdyby jakiś program ingerował w bezpieczeństwo systemu wyłączając mi zabezpieczenia; Jeśli faktycznie istnieje taka możliwość to omijałbym ją szerokim łukiem;

olesio napisał(a)

Także luki w bezpieczeństwie pewnie są, ale niestety takie czasy że systemy idą w stronę bajerów wizualnych i upierdliwych mechanizmów robiących z usera idiotę.

Być może tak, ale obstawiam, że dlatego wprowadzono UAC bo użytkownicy systemu często po prostu są idiotami (bez obrazy, piszę ogólnie i nie mam nikogo na myśli) - sami bardzo często "pozwalają" na zaśmiecenie systemu i narażenie go na szkodliwe oprogramowanie; A nawet, jeśli nie brać pod uwagę malware'u to instalacjami programów potrafią całkowicie zawalić system; Myślący użytkownik (czyli w większości przypadków ludzie znający komputery) dba o system co dnia, przez co kontroluje go w jakimś tam stopniu; Niestety w 99% przy korzystaniu z cudzego komputera naprawdę krew zalewa, bo mimo "dwujajowości" działają 2x wolniej, niż 10-letnie laptopy;

W mojej ocenie zabezpieczenia systemu nie są dostosowane do obrony przed szkodliwym oprogramowaniem, a szkodliwym użytkownikiem; Dlatego też dla tych, którzy dbają o porządek i stabilność systemu, UAC jest upierdliwym dziwolągiem;

To tylko moje zdanie oparte na setkach niemiłych spotkań z cudzymi komputerami... :]


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
KA
  • Rejestracja:ponad 19 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Gorlice
0

Aplikacja może wiele czasu nie straci ale użyszkodnika wprowadzi w odpowiedni nastrój (co by nie napisać dosłownie o co chodzi) jak 2 razy zapyta o zgodę. Ja wiem o tym brałem pod uwagę aby Update był w "Dane Aplikacji" tylko że mam z tym problem bo chcę aby program nie wymagał instalatora wystarczy wypakować i ma działać dlatego zrobiłem na razie jak pisał @olesio przed odpaleniem kopiuję update.exe do temp zobaczymy jak to się sprawdzi a wygląda że powinno.

Co do UAC pamiętam czasy kiedy programista był panem systemu ring 0 to nie było nic nadzwyczajnego do osiągnięcia (na poziomie programu nie sterownika) teraz nam umilają życie każą kupować jakieś certyfikaty co by było że jesteśmy "zaufanymi" ale faktycznie poziom bezpieczeństwa systemu poszedł do przodu. Tak zgadza się jest to czasami upierdliwe jak choćby w moim przypadku ale jak by nie było podnosi bezpieczeństwo tak sobie myślę napisz teraz wirusa który zmodyfikuje/skasuje ci pliki systemowe bez Twojej zgody dawniej to był żaden problem mogłeś nawet zrobić format C: (z jakimś parametrem nie pamiętam że nie pytał nawet użytkownika o zgodę). Wiem że UAC bywa upierdliwy i czasami faktycznie z użytkownika robi potencjalnego idiotę ale co w jaki sposób ma kontrolować stan wiedzy użytkownika? A przecież z tego co wiem gdzieś (nie pamiętam nawet gdzie nie było mi to potrzebne zwłaszcza jak piszę programy to chcę testować w środowisku "szarego" użytkownika) można ustawić "poziom upierdliwości" UAC.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:minuta
  • Lokalizacja:Tuchów
  • Postów:12154
0

Ja wiem o tym brałem pod uwagę aby Update był w "Dane Aplikacji" tylko że mam z tym problem bo chcę aby program nie wymagał instalatora wystarczy wypakować i ma działać dlatego zrobiłem na razie jak pisał @olesio przed odpaleniem kopiuję update.exe do temp zobaczymy jak to się sprawdzi a wygląda że powinno.

I to jest sensowne rozwiązanie, na dodatek jeśli przeniesiesz plik updatera do katalogu %Temp% to nie musisz go w ogóle usuwać; Mnóstwo aplikacji służących do czyszczenia i optymalizacji systemu właśnie ten i wiele innych katalogów czyści; Sporo aplikacji zostawia w tych folderach pliki i pięknie Odkurzacz (czy Glary Utilities) usuwa co zbędne; No chyba, że plik aktualizatora zajmuje dziesiątki megabajtów to wtedy można się pokusić o natychmiastowe usunięcie;

Co do drugiej części o UAC - dobrze, że ją wprowadzono; To był duży krok naprzód jeśli chodzi o zabezpieczenie systemu; Może i idealny nie jest, ale sporo syfu blokuje i nie pozwala zdestabilizować systemu, a to zawsze się chwali; Minus jest ten, że programiści muszą więcej się napracować aby dostosować program do tych zabezpieczeń.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
babubabu
Zostawianie plików tymczasowych by "coś innego je usunęło" moim zdaniem jest złym rozwiązaniem bo jak by wszyscy twórcy programów wpadli na taki pomysł to podejrzewam że dysk zawalił by się w ciągu 2 - 3 dni.
flowCRANE
No i tak jest - kuknij sobie czasem w katalog Temp lub Prefetch po instalacji kilku programów :P
Opi
  • Rejestracja:ponad 20 lat
  • Ostatnio:około 10 godzin
  • Postów:1029
0

Chyba mnie ktoś wywołał do tablicy? ;)

Jeśli chcecie obejść autostart bez UAC, czyli usunąć plik przy starcie systemu za pomocą aplikacji wymagającej podwyższonych uprawnień należy program umieścić w harmonogramie zadań.

W skrócie:

  1. Uruchamiasz program z manifestem, który wywoła zapytanie UAC z zezwoleniem na start,

  2. Wskazujesz, który plik chcesz usunąć przy starcie systemu,

  3. Dodajesz swój program za pomocą komendy do harmonogramu zadań:
    "schtasks /create /sc onlogon /tn "NAZWA_PROGRAMU" /tr "\"' + Application.ExeName + '\" /PARAMETR_PROGRAMU" /rl highest /f"
    gdzie /PARAMETR_PROGRAMU ustawiasz sobie sam, aby Twój program wiedział, że ma przystąpić do usuwania, a nie do zwykłego uruchomienia

  4. Restart systemu, Twój program robi swoje, a na zakończenie porządkuje po sobie, czyli usuwa siebie z harmonogramu:
    "schtasks /delete /tn "NAZWA_PROGRAMU" /f"

edytowany 1x, ostatnio: Opi
KA
  • Rejestracja:ponad 19 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Gorlice
0

Nie wiem nie chce mi się sprawdzać bo już rozwiązałem problem przez kopiowanie do TEMP ale czy do dodania do harmonogramu bądź przy uruchamianiu programu nie będzie trzeba podnieść uprawnień? To nic nie daje równie dobrze moja apka mogła by go kasować gdyby miała odpowiednie uprawnienia chodziło o to aby 2x nie prosić u uprawnienia.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
edytowany 1x, ostatnio: kAzek
Opi
  • Rejestracja:ponad 20 lat
  • Ostatnio:około 10 godzin
  • Postów:1029
0

Podałem, że podnosisz uprawnienia raz przy dodaniu do harmonogramu. Potem z harmonogramu UAC nie pyta się użytkownika, mimo, że aplikacja startuje z najwyższymi uprawnieniami. Mało tego, można dodać skrót na pulpit bezpośrednio do harmonogramu i wywoływać swój program z w/w uprawnieniami bez pytań ze strony UAC.

KA
  • Rejestracja:ponad 19 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Gorlice
0

No tak tylko że Update zapyta o pozwolenie ma podniesienie uprawnień (nie dla całej aplikacji tylko dla IFileOperation) a później aplikacja i co mi to daje? Gdyby aplikacja miała pytać to po co mi jakiś harmonogram wystarczyło by aby aplikacja skasowała ten plik. Chodziło o to aby 2x nie pytać.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
edytowany 1x, ostatnio: kAzek
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)