Dlaczego te polecenie nie działa na VISTA/7 ?

0

Witam.

Mam problem: stworzyłem sobie takie oto polecenie:

FOR /F "tokens=2* delims=	" %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRar.exe" /v "Path"') DO SET WinRarInstallDir=%%B
xcopy *.* "%WinRarInstallDir%" /y /q /e

XP: wszystko śmiga, za parametr kopiowania bierze sobie ścieżkę z rejestru i pliki sa kopiowane

VISTA/7: Odpalam w linii poleceń i mam takie coś:

FOR /F "tokens=2* delims=" %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE
\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRar.exe" /v "Path"') DO
SET WinRarInstallDir=%%B
W tym momencie %%A było nieoczekiwane.

Nie muszę dodawać, że to mi rozwala wszystko, bo ta cześć skryptu musi działać zarówno na XP jak i na VISTA/7.

Proszę o pomoc doświadczone grono użytkowników.

1

bo pod V/7 nie masz dostępu do gałęzi HKLM

0

Czy jest jakiś sposób żeby na VISTA/7 dostać ścieżkę z katalogiem instalacyjnym ? Dam komuś 4 litry Coca-Coli (10zł) jeżeli ktoś pomoże mi w obejściu tego problemu.

1

spróbuj odpalać skrypt z uprawnieniami administratora (od czasu Visty nie wystarczy być administratorem…)

0

Tak, tylko jak to zrobić, skoro już się odpaliło bat ? Bat jest uruchamiany z WinRar Self-Extracted Archive: mamy tam opcję "Żądaj uprawnień administratora" ale to działa tylko dla samego SFX Rar'a a nie dla tego, co jest wypakowane i uruchomione :/ Ech, czeka mnie ciężka noc ...

1

A musisz tworzyć archiwum z WinRAR'em? Może warto sprobowac NSIS'a albo Inno Setup? Na pewno NSIS pozwala wymusić uruchomienie siebie na prawach admina, a dzięki językowi skryptowemu pobierzesz sobie z rejestru to co potrzebujesz. Wiadomo exek z dużą ilością różnych plików będzie ciutke większy niż archiwum SFX WinRAR'a, ale po kompresji lzma powinno być ok. NSIS posiada bogatą dokumentację również cxęśćiowo przetłumaczoną na Polski, a do tego masę przykładowych skryptów. Instalator jest limitowany do rozmiaru 2 GB, to powinno Tobie wystarczyć. Jak nie to doradzają podzielić instalację na małe instalatory i użycie zewnętrznych plików. A wiele plików do archiwum dołączysz na przykład poleceniem: Przykładowy program instalacyjny jaki bardzo łatwo zrobilęm NSIS'em masz na http://olesio.eu/fb ale można tworzyć bardziej złożone instalatory oczywiście.
File "D:\COSIK\*"

0

Niestety ja muszę użyć WinRar'a, który to po odpakowaniu do tempa uruchomi mi to powyżej bo takie archiwum SFX można edytować: wystarczy do katalogów dodać pliki, i już mamy gotowy "Instalator kopiujący wszystko tam gdzie jest zainstalowany program". A ścieżka musi być brana z rejestru bo ustalać ją sztywno na C:\Program Files\Cośtam to amatorka nie do pomyślenia :/

0

Może zainteresuj się InnoSetup, tak samo prosto jak WinRar wystarczy kliknąć rebuild.
Odpalisz co chcesz w dowolnym trybie.

0

Wspominałem wyżej, że plików Inno nie da się "Otworzyć, wrzucić pliki i mam gotowy instalator" a to własnie jest konieczne :/

0

Taaaa, "jest konieczne wrzucić pliki i masz gotowy instalator" tylko że zapomniałeś o kilku godzinach walki z uruchomieniem tego co zainstalowałeś tym gotowym instalatorem.
A do Inno dopisz sobie batch'a który początek weźmie z jednego pliku koniec z drugiego a środek wypełni plikami z podanego folderu (z odpowiednimi przedrostkami i przyrostkami) po czym odpali reduild inno.

1

Moment, ale req query robi odczyt z gałęzi HKLM, który bez problemów da się zrobić bez uprawnień administratora.

C:\Users\Marcin>reg query "hklm\software\microsoft\windows\currentversion\run"

HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\run
    XboxStat    REG_SZ    "C:\Program Files\Microsoft Xbox 360 Accessories\XboxStat.exe" silentrun

U mnie na 7 (ale nie mam WinRAR-a) po prostu nie ma ściezki HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\, mniejsza o to, bo czepianie się %%a to błąd "składniowy".

Dla odmiany for /f %a in ('reg query "hklm\software\microsoft\windows\currentversion\run"') do echo %a działa, więc problem jak wół jest w zastosowaniu %%a.

1
Misiekd napisał(a)

bo pod V/7 nie masz dostępu do gałęzi HKLM

Bzdura, Misiekd, BZDURA! NT6 ma niemal identyczne prawa dostępu do HKLM co NT5, prawo do zapisu przyznane ma jedynie konto SYSTEM i grupa Administratorzy, Wszyscy mogą wyłącznie odczytywać; konfiguracja obecna w linii NT od samego początku. Różnica istnieje wyłącznie dla tłuków przywykłych do siedzenia na koncie roota.

0
Ktos napisał(a)

Moment, ale req query robi odczyt z gałęzi HKLM, który bez problemów da się zrobić bez uprawnień administratora.

C:\Users\Marcin>reg query "hklm\software\microsoft\windows\currentversion\run"

HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\run
    XboxStat    REG_SZ    "C:\Program Files\Microsoft Xbox 360 Accessories\XboxStat.exe" silentrun

U mnie na 7 (ale nie mam WinRAR-a) po prostu nie ma ściezki HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\, mniejsza o to, bo czepianie się %%a to błąd "składniowy".

Dla odmiany for /f %a in ('reg query "hklm\software\microsoft\windows\currentversion\run"') do echo %a działa, więc problem jak wół jest w zastosowaniu %%a.

Super. Możemy już jakoś wyświetlić to co che, tylko że tak:

  • gdy wywołujemy: for /f %a in ('reg query "hklm\software\microsoft\windows\currentversion\run"') do echo %a z lini poleceń to działa
  • gdy odpalam plik bat, w którym jest tylko ta linijka pisze mi:
Składnia polecenia jest niepoprawna.

C:\TP>for /f a

C:\TP>

Może to dlatego, że:

O ile dobrze pamiętam (mogę się mylić), to zasada jest taka:

  • w plikach (skryptach) używasz dwóch procentów przed nazwą zmiennej
  • w linii poleceń jednego procenta

Czyli:

  • to będzie dobre w linii poleceń, ale wywoła błąd w skrypcie:

for %x in (a b c) do echo %x

  • to będzie dobre w skrypcie, ale wywoła błąd w linii poleceń:

for %%x in (a b c) do echo %%x

Przykład:
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\winrar.exe" /v "Path"

po odpaleniu pojawia się nam w linii poleceń:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\winrar.exe
Path    REG_SZ    C:\Program Files\WinRAR

jak teraz z tego pobrać "C:\Program Files\WinRAR" zjako parametr ?

Do tego własnie służył ten skrypt. Na XP śmiga a na VISTA/7 nie działa omg :-(

0

UDAŁO SIĘ \o/ Z pomocą ale się udało: panie Ktos, che pan te 4 litry koli ?

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