Avatar billede PJ67 Juniormester
03. oktober 2021 - 02:19 Der er 17 kommentarer

Nybegynder-problem

Hej :-)

Er der nogen, der kan fortælle mig, hvad problemet i koden er ift. at få cmd.exe (kommandoprompt) til at forstå disse parametre til automatisk installation af Microsoft .Net Framework 1.1? Parametrene er rigtige, men skal sikkert pakkes ind i nogle tegn eller andet, da det nok bliver forstyrret af anden kode.

Se screenshot: https://i.ibb.co/J2jjXYV/Kodeproblem.png

"/l var ikke ventet på dette tidspunkt." ... lyder svaret fra Windows.

Kører man kommandoen selvstændigt i en tom kommandoprompt virker den ok, men det er ikke formålet:

dotnetfx.exe /q:a /c:"install /l /q"

Formålet er at lave en dansk opdateringsopsamling til det nu forgangne Windows XP til retroprojekter. Derfor har jeg videreudviklet på et open source-program, men der er brug for denne kode for at gøre det komplet.

Vær gerne så pædagogisk som muligt, da jeg ikke er uddannet programmør. ;-)
Avatar billede KHN Guru
03. oktober 2021 - 10:40 #1
Avatar billede claes57 Ekspert
03. oktober 2021 - 11:49 #2
har du prøvet uden " omkring? jeg tror kommandoer selv sætter grænser ved c: osv indtil slut eller ny kommando x: eller andet som den skal reagere på.
Avatar billede Slettet bruger
03. oktober 2021 - 12:08 #3
Desværre vil dette ikke være understøttet på Windows 10.

https://devblogs.microsoft.com/dotnet/net-core-1-0-and-1-1-will-reach-end-of-life-on-june-27-2019/

Måske kan du overføre det ved hjælp af .NET Core

Held og lykke.

Windows 10 understøtter kun .Net 3.5 (inkluderer .Net 2.0 og .Net 3.0),
samt .Net 4.8
Avatar billede PJ67 Juniormester
03. oktober 2021 - 13:02 #4
claes57 > Det virker desværre ikke. Jeg har netop prøvet det.

Parametrene virker fint, når de køres separat i et primitivt script uden anden kode, hvilket dog ikke er formålet. Dog skal de yderste " 'er fjernes, så der bare står:
dotnetfx.exe /q:a /c:”install /l /q”

Jeg har prøvet med det skrevne - altså ekstra "". Det virkede slet ikke.

Parametrene blev fundet på denne side:
https://maaruthi.wordpress.com/tag/dot-net-framework-silent-installation/

- - - UDKLIP - - -
Microsoft Dot Net Framework 1.1 + Language Pack – Silent Parameters

Framework

“dotnetfx.exe /q:a /c:”install /l /q””

Language Pack
“Any setup name” + “parameters” (Current parameters: /q:a /c:”inst /l /q”)

LangPack.exe /q:a /c:”inst /l /q”
Avatar billede PJ67 Juniormester
03. oktober 2021 - 13:05 #5
Øvrige > Jeg er ved at videreudvikle et automatisk installationsscript, der baserer sig på andres open source-kode. Jeg har allerede programmet liggende offline, og det er til automatisk installation på Windows XP, da Windows Update ikke virker længere.
Avatar billede PJ67 Juniormester
03. oktober 2021 - 13:22 #6
Her er, hvad programmet foreslår af parametre, hvis man kører kommandoen:

dotnetfx.exe /?

https://i.ibb.co/VmkQVwm/Parametre.png
Avatar billede Slettet bruger
03. oktober 2021 - 13:24 #7
https://docs.microsoft.com/en-us/lifecycle/products/windows-xp

Eller, du kan benytte WSUS Offline?

Når man kigger på Windows XP end of life, for sidste service pack 3 era, kan det godt måske lade sig gøre at hente versionen som er på Februar / Marts 2014?

https://download.wsusoffline.net/

Dette vil være version "05.03.2014 Version 9.0 (Hashes, AV check)"
Avatar billede Slettet bruger
03. oktober 2021 - 13:25 #8
Avatar billede PJ67 Juniormester
03. oktober 2021 - 13:33 #9
Jørgen B. > Jeg kender godt til programmet. Jeg har selv lavet et fork af det. Jeg forsøger at tilpasse præcis det samme program som du nævner i en offline-version, så det bliver så komplet som muligt:

https://archive.org/details/windowsxpupdates_da-dk/07_x86.png

Det er mig, der har lavet det, jeg her linker til. Men det understøtter ikke (endnu) automatisk installation af .Net 1.1. Kun 3.5 og 4.0. 1.1 er ikke inkluderet i 3.5 - det er kun 2.0 og op.

Jeg har nu fået indbygget installation af .Net 1.1 i koden, men det kan desværre ikke køre uden brugerinput undervejs - uden tryk på "Næste", "Næste" osv., hvor installationsscriptet går i stå imens. Det er det, jeg gerne vil have automatiseret - ligesom resten af programmet (WSUS Offline Update).
Avatar billede PJ67 Juniormester
03. oktober 2021 - 13:35 #10
Gør jeg det, sker følgende:
https://i.ibb.co/J2jjXYV/Kodeproblem.png
Avatar billede Slettet bruger
03. oktober 2021 - 13:54 #11
Så vidt jeg husker, så længe disse dotnet installeres, skal man foretage genstart for at få det til at træde i kraft. Er det måske dette du skal tvinge om på før man kan bekræfte dette med echo?

Men, det er længe siden, og har selv offline installer, hvis jeg ikke har slettet det selv. 😊
Avatar billede PJ67 Juniormester
03. oktober 2021 - 14:09 #12
Hvis jeg i en kommandoprompt selv kører kommandoen - altså uden WSUS-scriptet:

cd "C:\wsus\dotnet\"
dotnetfx.exe /q:a /c:"install /l /q"

... og hvor den øverste linje er stien til, hvor installationsprogrammet ligger lige nu, så kan det godt installeres, hvorefter det ligger under "Tilføj/fjern programmer". Det kræver ikke brugerinput eller en genstart efterfølgende.

Men sætter jeg det ind i WSUS-scriptet melder det fejl på parametrene. Alternativt dukker installationsprogrammet op med brugerinput, og det skal det ikke. Så installationsprogrammet kan godt startes. Det er parametrene, der driller. Jeg mistænker derfor, at det er noget andet kode på samme kodelinje, der forvirrer, når det står sammen med parametrene.

Jeg har også prøvet at fjerne parenteserne, uden det gjorde en forskel. Men det ender altid sådan her:
https://i.ibb.co/J2jjXYV/Kodeproblem.png
Avatar billede Slettet bruger
03. oktober 2021 - 14:13 #13
Ja, det er nok en sprogpakke som er med inkluderet. Hvis dette blot er for dotnet, behøver du ikke sprogpakke parameter. Fokuser kun på dotnet installation. ✌
Avatar billede PJ67 Juniormester
03. oktober 2021 - 14:35 #14
Sprogpakken er et program, der installeres efterfølgende. Den er ikke inkluderet.

Det har næsten de samme parametre:
dotnetfx.exe /q:a /c:"install /l /q"
langpack.exe /q:a /c:"inst /l /q" (dansk sprogpakke)

Forskellen er bare "install" og "inst" på de to. Det er ikke sprogpakken, der får det første program, altså hovedprogrammet til at gå i stå. /l må betyde noget andet end "language" eller "localization". Jeg har prøvet at køre uden /l og /q. Så åbner programmet bare op til manuel installation. Så det må være /l og /q der er afgørende for en "silent installation".

Screenshot/forklaring:
https://i.ibb.co/GFx29mW/Kodeproblem2.png
Avatar billede PJ67 Juniormester
03. oktober 2021 - 14:38 #15
Ved at have /l og /q med til sidst kørte installationen i hvert fald "silent" uden nogle meddelelser. Men det var i et primitivt script uden andet indhold end denne kommando.
Avatar billede Slettet bruger
03. oktober 2021 - 15:11 #16
NET11_FILENAME=..\dotnet\dotnetfx.exe /q /norestart

eller

NET11_FILENAME=..\dotnet\dotnetfx.exe  -z  -m

??
Avatar billede PJ67 Juniormester
03. oktober 2021 - 15:29 #17
Desværre - den siger bare "file not found" nu. Ellers fint bud. :-)

Koden bag er kopieret fra .Net 3.5-kodestumpen fra DoUpdate.cmd i programmet og tilpasset .Net 1.1.

Filnavnet bliver hentet fra:
set DOTNET11_FILENAME=

Men parametrene bagefter skal åbenbart stå efter %VERIFY_MODE% længere nede. Det gjorde det ved .Net 3.5. Her er parametrene:
/ignoreerrors /qb /norestart /lang:enu

Men installationsprogrammet til .Net 3.5 kræver andre parametre. Jeg har prøvet med disse i .Net 1.1, men så popper installationsprogrammet (dotnetfx.exe) op med besked om syntaksfejl i en dialogboks.

Her er koden fra scriptet til de to .Net-versioner:
- - - - - - - - -

rem *** Install .NET Framework 1.1 SP1 ***
if "%INSTALL_DOTNET11%" NEQ "/instdotnet11" goto SkipDotNet11Inst
if "%OS_NAME%"=="w61" goto SkipDotNet11Inst
if "%OS_NAME%"=="w62" goto SkipDotNet11Inst
if "%OS_NAME%"=="w63" goto SkipDotNet11Inst
echo Checking .NET Framework 1.1 SP1 installation state...
if %DOTNET11_VER_MAJOR% LSS %DOTNET11_VER_TARGET_MAJOR% goto InstallDotNet11
if %DOTNET11_VER_MAJOR% GTR %DOTNET11_VER_TARGET_MAJOR% goto SkipDotNet11Inst
if %DOTNET11_VER_MINOR% LSS %DOTNET11_VER_TARGET_MINOR% goto InstallDotNet11
if %DOTNET11_VER_MINOR% GTR %DOTNET11_VER_TARGET_MINOR% goto SkipDotNet11Inst
if %DOTNET11_VER_BUILD% LSS %DOTNET11_VER_TARGET_BUILD% goto InstallDotNet11
if %DOTNET11_VER_BUILD% GTR %DOTNET11_VER_TARGET_BUILD% goto SkipDotNet11Inst
if %DOTNET11_VER_REVIS% GEQ %DOTNET11_VER_TARGET_REVIS% goto SkipDotNet11Inst
:InstallDotNet11
set DOTNET11_FILENAME=..\dotnet\dotnetfx.exe
set DOTNET11LP_FILENAME=..\dotnet\langpack.exe
if not exist %DOTNET11_FILENAME% (
  echo Warning: .NET Framework 1.1 SP1 installation file ^(%DOTNET11_FILENAME%^) not found.
  echo %DATE% %TIME% - Warning: .NET Framework 1.1 SP1 installation file ^(%DOTNET11_FILENAME%^) not found>>%UPDATE_LOGFILE%
  goto SkipDotNet11Inst
)
echo Installing .NET Framework 1.1 SP1...
call InstallOSUpdate.cmd %DOTNET11_FILENAME% %VERIFY_MODE% /q:a /c:"install /l /q"
if "%OS_LANG%" NEQ "enu" (
  dir /B %DOTNET11LP_FILENAME% >nul 2>&1
  if errorlevel 1 (
    echo Warning: .NET Framework 1.1 SP1 Language Pack installation file ^(%DOTNET11LP_FILENAME%^) not found.
    echo %DATE% %TIME% - Warning: .NET Framework 1.1 SP1 Language Pack installation file ^(%DOTNET11LP_FILENAME%^) not found>>%UPDATE_LOGFILE%
  ) else (
    echo Installing .NET Framework 1.1 SP1 Language Pack...
    for /F %%i in ('dir /B %DOTNET11LP_FILENAME%') do call InstallOSUpdate.cmd ..\dotnet\%%i %VERIFY_MODE% /q:a /c:"inst /l /q"
  )
)
copy /Y ..\static\StaticUpdateIds-dotnet11.txt "%TEMP%\MissingUpdateIds.txt" >nul
call ListUpdatesToInstall.cmd /excludestatics /ignoreblacklist
if errorlevel 1 goto ListError
if exist "%TEMP%\UpdatesToInstall.txt" (
  echo Installing .NET Framework 1.1 SP1 Family Update...
  call InstallListedUpdates.cmd /selectoptions %BACKUP_MODE% %VERIFY_MODE% /I /Q
)
set RECALL_REQUIRED=1
set DOTNET11_FILENAME=
set DOTNET11LP_FILENAME=
:SkipDotNet11Inst







rem *** Install .NET Framework 3.5 SP1 ***
if "%INSTALL_DOTNET35%" NEQ "/instdotnet35" goto SkipDotNet35Inst
if "%OS_NAME%"=="w61" goto SkipDotNet35Inst
if "%OS_NAME%"=="w62" goto SkipDotNet35Inst
if "%OS_NAME%"=="w63" goto SkipDotNet35Inst
echo Checking .NET Framework 3.5 SP1 installation state...
if %DOTNET35_VER_MAJOR% LSS %DOTNET35_VER_TARGET_MAJOR% goto InstallDotNet35
if %DOTNET35_VER_MAJOR% GTR %DOTNET35_VER_TARGET_MAJOR% goto SkipDotNet35Inst
if %DOTNET35_VER_MINOR% LSS %DOTNET35_VER_TARGET_MINOR% goto InstallDotNet35
if %DOTNET35_VER_MINOR% GTR %DOTNET35_VER_TARGET_MINOR% goto SkipDotNet35Inst
if %DOTNET35_VER_BUILD% LSS %DOTNET35_VER_TARGET_BUILD% goto InstallDotNet35
if %DOTNET35_VER_BUILD% GTR %DOTNET35_VER_TARGET_BUILD% goto SkipDotNet35Inst
if %DOTNET35_VER_REVIS% GEQ %DOTNET35_VER_TARGET_REVIS% goto SkipDotNet35Inst
:InstallDotNet35
set DOTNET35_FILENAME=..\dotnet\dotnetfx35.exe
set DOTNET35LP_FILENAME=..\dotnet\%OS_ARCH%-glb\dotnetfx35langpack_%OS_ARCH%%OS_LANG_SHORT%*.exe
if not exist %DOTNET35_FILENAME% (
  echo Warning: .NET Framework 3.5 SP1 installation file ^(%DOTNET35_FILENAME%^) not found.
  echo %DATE% %TIME% - Warning: .NET Framework 3.5 SP1 installation file ^(%DOTNET35_FILENAME%^) not found>>%UPDATE_LOGFILE%
  goto SkipDotNet35Inst
)
echo Installing .NET Framework 3.5 SP1...
call InstallOSUpdate.cmd %DOTNET35_FILENAME% %VERIFY_MODE% /ignoreerrors /qb /norestart /lang:enu
if "%OS_LANG%" NEQ "enu" (
  dir /B %DOTNET35LP_FILENAME% >nul 2>&1
  if errorlevel 1 (
    echo Warning: .NET Framework 3.5 SP1 Language Pack installation file ^(%DOTNET35LP_FILENAME%^) not found.
    echo %DATE% %TIME% - Warning: .NET Framework 3.5 SP1 Language Pack installation file ^(%DOTNET35LP_FILENAME%^) not found>>%UPDATE_LOGFILE%
  ) else (
    echo Installing .NET Framework 3.5 SP1 Language Pack...
    for /F %%i in ('dir /B %DOTNET35LP_FILENAME%') do call InstallOSUpdate.cmd ..\dotnet\%OS_ARCH%-glb\%%i %VERIFY_MODE% /ignoreerrors /qb /norestart /nopatch
  )
)
copy /Y ..\static\StaticUpdateIds-dotnet35.txt "%TEMP%\MissingUpdateIds.txt" >nul
call ListUpdatesToInstall.cmd /excludestatics /ignoreblacklist
if errorlevel 1 goto ListError
if exist "%TEMP%\UpdatesToInstall.txt" (
  echo Installing .NET Framework 3.5 SP1 Family Update...
  call InstallListedUpdates.cmd /selectoptions %BACKUP_MODE% %VERIFY_MODE% /ignoreerrors
)
set RECALL_REQUIRED=1
set DOTNET35_FILENAME=
set DOTNET35LP_FILENAME=
:SkipDotNet35Inst
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester