Dodanie programu do autostartu – klucz pojawia się w złej gałęzi rejestru

0

Witam, próbowałem różnych metod edycji rejestru aby dodać program do autostartu i ostatnie co wykombinowałem to to:

system("powershell.exe New-ItemProperty -Path HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run -Name TEST PropertyType String -Value C:\\Windows\\test\\test\\test.exe");

Skompilowany program odpalam z uprawnieniami administratora i zamiast wartość pojawić się w:

\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

pojawia się w

\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run

Jakiś czas temu jeszcze to działało. Mógłby ktoś mi wytłumaczyć o co chodzi ?
Dodam że przy restarcie kompa test.exe się nie uruchamia a gdy manualnie dodam tą wartość to wszystko działa. System od zawsze mam 64 bitowy.

0

A dlaczego nie użyjesz jakiejś ludzkiej biblioteki do obsługi rejestru tylko bawisz się w sztuczki z wywoływaniem PS za pomocą funkcji system?

0
Eiter napisał(a):

Skompilowany program odpalam z uprawnieniami administratora […]

Bez takich uprawnień, nie wprowadziłbyś żadnych zmian w rejestrze, jeśli o gałąź HKLM chodzi.

[…] i zamiast wartość pojawić się w […]

Struktura rejestru zmieniła się wraz z pojawieniem się Win Vista, a także 64-bitowych wersji systemów operacyjnych. System przekierowuje modyfikacje rejestru dla aplikacji 32-bitowych, uruchamianych w środowisku 64-bitowym i jest to jak najbardziej zamierzone/konieczne.

Jakiś czas temu jeszcze to działało.

Na pewno ”zadziała” na starszych systemach (Win XP i wcześniejsze) i zapewne na nowszych, ale 32-bitowych. W pozostałych przypadkach system nie pozwoli na zmodyfikowanie tego konkretnego klucza.

0

Alternatywnie możesz olać rejestr i wrzucić program manualnie do autostartu:
C:\Users\user\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-copyfile

0

Wprawdzie robisz to strasznie na opak, ale najprościej będzie odpalić 64-bitowego powershella, na przykład używając tego: https://stackoverflow.com/a/38981021/1543037

0

W powershellu możesz używać .NET a w .NETcie możesz zrobić tak:
RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).CokolwiekChceszTamDalejZrobic()

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