[C++] Wykonanie procedury tylko raz

0

Piszę pewnien program i chcę aby pewna procedura była wykonana tylko raz.

Chodzi o to, że gdy odpalę program pierwszy raz to procedura ma się wykonać, a gdy odpalę każdy następny raz to już nigdy ma się nie wykonać.

Wpisy do rejestru, kopiowanie pliku z informacją - odpada, ze względu na to, że zaraz będzie piszczeć, że to wirus.

Jak zapisać taką informację?

0

Tworzysz sobie plik i sprawdzasz czy istnieje i czy zawiera odpowiednią wartość, jeśli nie to wykonujesz funkcję i tworzysz ten plik z odpowiednią wartością.

0

Czemu ma piszczeć, że to wirus? Zapisywanie do rejestru to nic niezwykłego, tak samo jak do pliku, a gdzieś tą informację musisz zapisać.

0

Ile razy tak próbowałem to Kaspersky darł się, że podejrzana akcja...

a jak skanuje wtedy plik na virustotal.com to nagle przez głupi rejestr wykrywa mi 5 antywirusów. :|

Jakiś inny pomysł? Da się jakoś zapisać sam w sobie?

0

A może w jakieś dziwne miejsce w tym rejestrze chcesz zapisać? Zawsze możesz jeszcze np. w ini zapisać taką informację. Sam w sobie to nie bardzo.
Aż sam z ciekawości sprawdziłem i mi virustotal nie krzyczał ani razu przy exe, który zapisuje/czyta rejestr, więc coś musisz źle robić.

0

Pokaż w jaki sposób zapisałeś wartość i gdzie.

0
RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Software"), 0, KEY_QUERY_VALUE, &hKey);
RegOpenKeyEx(hKey, tu_np_nazwa_aplikacji, 0, KEY_SET_VALUE, &hKey2);
RegSetValueEx(hKey2, nazwa_wartości, 0, REG_SZ, wartość, rozmiar_wartości);
RegCloseKey(hKey2);
RegCloseKey(hKey);

To tak w przybliżeniu ;) przy okazji zobaczyłem, że u siebie nie zamykam kluczy :p
No i wy tym fragmencie zakładam, że te klucze już istnieją, jeżeli trzeba je utworzyć to masz od tego RegCreateKeyEx.

0

@byku_guzio, dwie uwagi:

  • nie używaj bez powodu HKEY_LOCAL_MACHINE - to klucz z ustawieniami globalnymi, ich modyfikacja wymaga uprawnień administratora, głównie grzebią tutaj instalatory; rzeczy per użytkownik i nie-globalna konfiguracja ląduje w HKEY_LOCAL_MACHINE, tj. w prywatnym hive'ie użytkownika, który program odpalił;
  • po cholerę dwa otwarcia odstawiasz, jakby nie dało się tego zrobić za jednym zamachem?

Poprawniejszy przykład:

  HKEY key = NULL;
  DWORD value = 666;
  RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft", 0, KEY_QUERY_VALUE | KEY_SET_VALUE, &key);
  RegSetValueEx(key, "zuoJakChuj", 0, REG_DWORD, (const BYTE *)&value, sizeof value);
  RegCloseKey(key);
0

Masz rację, jak na razie ten kod jest tylko do testów, jeszcze trochę będzie zmieniany. Zapisuję do globalnych, bo docelowo to ma być serwer, który może być odpalony przez dowolnego użytkownika, trzymam tam connection string, login i pwd do bazy.

0

wydaje mi sie ze wygodniejsze bedzie jednak zapisanie tego do pliku wraz z ustawieniami serwera. przy pierwszym uruchomieniu spyta o haslo do bazy i takie [CIACH!] a kolejnym razem wczyta ustawienia. wydaje mi sie ze lepiej nie smiecic niepotrzebnie uzytkownikowi rejestru

1 użytkowników online, w tym zalogowanych: 0, gości: 1