.NET 3.5 Integration Windows 8.1

highman72
Beiträge: 83
Registriert: 28 Sep 2008, 10:07

.NET 3.5 Integration Windows 8.1

Beitrag von highman72 »

Hallo liebe Supporter,

ich habe ein kleines Problem mit den .NET 2.0 bzw. 3.5 Framwork-Paketen unter Windows 8.1. Standardmäßig ist das bereits auf der CD, wird aber nicht installiert. Das ist von Microsoft so gewollt und so vorgesehen. Folgender Befehl holt das nach:

Code: Alles auswählen

DISM.exe /online /enable-feature /featurename:NetFX3 /All /Source:"F:\sources\sxs" /LimitAccess
wobei F: die eingelegte DVD oder eben der Windows 8.1 Ordner ist.

Ich habe mir nun mal ganz einfach gedacht, ich könnte ja ganz einfach das nach der Installation von Windows 8.1 nachholen, indem ich eine Datei im postinst.d-Verzeichnis erstelle (98_integrate_dot_net.cmd, um möglichst spät ausgeführt zu werden), die folgenden Inhalt hat:

Code: Alles auswählen

DISM.exe /online /enable-feature /featurename:NetFX3 /All /Source:"%script_drive%\installfiles\sources\sxs" /LimitAccess
Ich kann in den Logs sehen, dass die Datei kopiert wird, ich sehe aber nirgendwo ob und wann die cmd ausgeführt wird. Ich sehe nur, dass nach der Windows Installation .NET 3.5 nicht aktiv ist.

Ich könnte mir ja jetzt ein Updatepaket machen, bei dem ich mittels eines symbolischen Links auf das SXS-Verzeichnis der Windows 8.1 Installation verlinke und die Installation nachhole, aber praktischer wäre das denke ich mit der cmd.

Any Ideas?

Liebe Grüße
Highman72
highman72
Beiträge: 83
Registriert: 28 Sep 2008, 10:07

Re: .NET 3.5 Integration Windows 8.1

Beitrag von highman72 »

So, ich habe jetzt die richtigen Logs gefunden... Offenbar werden die Logs nicht bei opsi.org sondern in tmp\postinst.log angelegt.

Code: Alles auswählen

[10.02.2014 14:06:03,41] Executing c:\tmp\postinst.d\98_integrate_dot_net.cmd 

Tool zur Imageverwaltung fr die Bereitstellung
Version: 6.3.9600.16384

Abbildversion: 6.3.9600.16384

Features werden aktiviert

Fehler: 0x800f081f

Die Quelldateien wurden nicht gefunden. 
Geben Sie mit der Option "Quelle" den Ort der Dateien an, die zum Wiederherstellen des Features erforderlich sind. Weitere Informationen zum Angeben eines Quellorts finden Sie unter "http://go.microsoft.com/fwlink/?LinkId=243077".

Die DISM-Protokolldatei befindet sich unter "C:\Windows\Logs\DISM\dism.log".
Die DISM-Logs zeigen dann folgende Zeilen

Code: Alles auswählen

2014-02-10 14:07:50, Info                  DISM   DISM.EXE: Executing command line: DISM.exe  /online /enable-feature /featurename:NetFX3 /All /Source:"X:\installfiles\sources\sxs" /LimitAccess
...
2014-02-10 14:07:51, Info                  DISM   DISM Package Manager: PID=1164 TID=1872 Encountered the option "source" with value "X:\installfiles\sources\sxs" - CPackageManagerCLIHandler::Private_GetPackagesFromCommandLine
2014-02-10 14:07:51, Info                  DISM   DISM Package Manager: PID=1164 TID=1872 Encountered an unknown option "source" with value "X:\installfiles\sources\sxs" - CPackageManagerCLIHandler::Private_GetPackagesFromCommandLine
2014-02-10 14:07:52, Info                  DISM   DISM Package Manager: PID=1164 TID=1872 Initiating Changes on Package with values: 5, 7 - CDISMPackage::Internal_ChangePackageState
2014-02-10 14:07:52, Warning               DISM   DISM Package Manager: PID=1164 TID=1872 CBS AddSource failed with HRESULT=0x80070003! - CDISMPackageManager::Internal_Finalize
2014-02-10 14:07:52, Info                  DISM   DISM Package Manager: PID=1164 TID=1872 CBS session options=0x20100! - CDISMPackageManager::Internal_Finalize
2014-02-10 14:08:03, Info                  DISM   DISM Package Manager: PID=1164 TID=1236  Error in operation: source for package or file not found, ResolveSource() unsuccessful. (CBS HRESULT=0x800f081f) - CCbsConUIHandler::Error
2014-02-10 14:08:03, Error                 DISM   DISM Package Manager: PID=1164 TID=1872 Failed finalizing changes. - CDISMPackageManager::Internal_Finalize(hr:0x800f081f)
Oha, offenbar ist %ScriptDrive% nicht komplett korrekt, aber warum...?

Ich dachte, dass X:\ auf opt/pcbin/install/win81-x64 verweist, oder nicht? Oder muss ich den Mount gar erst initialisieren?

Wer weiß Rat?

Danke vorab und Grüße
highman72
r.witzel
Beiträge: 74
Registriert: 01 Aug 2011, 14:57
Wohnort: Melle

Re: .NET 3.5 Integration Windows 8.1

Beitrag von r.witzel »

Was du suchst ist %ScriptPath% :)
Das expandiert nach O:\Paketname\
Carpe Opsi :)
highman72
Beiträge: 83
Registriert: 28 Sep 2008, 10:07

Re: .NET 3.5 Integration Windows 8.1

Beitrag von highman72 »

Hallo r.witzel,

das ist möglich, aber ich dachte, diese Umgebungsvariable gilt nur in WINST. Was im postinst.d liegt und nach der Installation ausgeführt wird sind doch Windows-Batch-Files. Und da dürfte diese Variable ja gar nicht existieren, oder? Eine Ebene höher unterhalb von opsi, werden in der postinst.cmd lediglich folgende Variablen definiert:

Code: Alles auswählen

rem --- Vars
set sys_drive=c:
set script_drive=%~d0%
set script_dir=%~f0%
set script_dir=%script_dir:~0,-12%postinst.d
set tmp_dir=%sys_drive%\tmp
set log_file=%tmp_dir%\postinst.log
allerdings weiß ich nicht, wo das aktuelle Laufwerk, das in %script_drive% gelesen wird, auch tatsächlich liegt.

Liege ich völlig falsch?

PS: bei mir ist es übrigens P:\Paketname unter WINST...

Danke und Grüße
Highman72
highman72
Beiträge: 83
Registriert: 28 Sep 2008, 10:07

Re: .NET 3.5 Integration Windows 8.1

Beitrag von highman72 »

Hmmmmhhhh,

habe jetzt nochmal ein bisschen rumgespielt und neu installiert... aber irgendwie ist mir die Funktion noch nicht ganz klar.

Ich habe in der postinst.cmd folgende Zeile ergänzt:

Code: Alles auswählen

set installfiles_dir=%script_dir:~0,-15%installfiles\sources\sxs
Da %script_dir% weisungsgemäß das opsi\postinst.d-Verzeichnis enthält, sollten 15 Zeichen weniger + installfiles\sources\sxs ja das gesuchte Verzeichnis ergeben... Tut es aber nicht.

Der DISM-Log zeigt mir wieder:
Z:\installfiles\sources\sxs nicht gefunden...

Komisch. Was ist denn im Verlauf der Installation Z:? Ist das der Inhalt von installfiles?

Wirklich komisch.

Hat wirklich keiner eine Idee, wo mein Denkfehler ist?

Danke und Grüße
Highman72
highman72
Beiträge: 83
Registriert: 28 Sep 2008, 10:07

Re: .NET 3.5 Integration Windows 8.1

Beitrag von highman72 »

Irgendwie alles komisch, daher habe ich jetzt doch ein localboot-Paket mit 94er Priorität gebaut...

Das Paket funktioniert zunächst nur für Windows 8.1 x64, lässt sich aber total einfach anpassen...:
In CLIENT_DATA liegt ein symbolischer Link auf ../win81-x64/installfiles/sources/sxs namens sxs (damit das funktioniert muss der Ordner natürlich im Paketverzeichnis vorhanden sein). Wenn das Paket installiert ist, verweist der Link dann allerdings nicht mehr auf das Paketverzeichnis, sondern tatsächlich auf den entsprechenden sxs-Ordner im win81-x64-Verzeichnis auf /var/lib/opsi/depot/ bzw. /opt/pcbin/install.

Im install-Skript rufe ich dann nur auf:

Code: Alles auswählen

ExecWith_dism "%systemroot%\cmd64.exe" /C
Sub_check_exitcode

[ExecWith_dism]
DISM.exe /online /enable-feature /featurename:NetFX3 /All /Source:"%SCRIPTPATH%\sxs" /LimitAccess
Damit wird dann endlich .NET 2.0 und 3.5 installiert...!

Wenn jemand Interesse hat, kann ich das Paket gerne mal irgendwohin hochladen (wohin? Beim wiki userspace müsste man den symlink dann blöderweise ja doch selbst machen. Und so kompliziert ist das Skript ja wahrlich nicht... Jemand von UiB eine Idee?). Es sollte mit win81-x64 sofort auch bei anderen Installationen funktionieren.

Liebe Grüße
Highman72
highman72
Beiträge: 83
Registriert: 28 Sep 2008, 10:07

Re: .NET 3.5 Integration Windows 8.1

Beitrag von highman72 »

Oder ich mache ein Kombipaket für Win 8, 8.1 jeweils x64 und x86, das über Schalter die entsprechende Version installiert... Interesse dafür?

Grüße
Highman72
highman72
Beiträge: 83
Registriert: 28 Sep 2008, 10:07

Re: .NET 3.5 Integration Windows 8.1

Beitrag von highman72 »

So, es hat mir ja keine Ruhe gelassen. Ich habe jetzt mal ein Paket für alle Windows 8(.1) Versionen erstellt. Inklusive einem Deinstaller...

Wer es mal testen möchte, kann das Paket hier herunterladen.

Feedback, Verbesserungswünsche, etc. nehme ich gerne entgegen. Vielleicht gibt es, wenn es gewünscht wird, auch eine bessere Möglichkeit der Ablage des Pakets als hier im Forum...

Liebe Grüße
Highman72
Benutzeravatar
SisterOfMercy
Beiträge: 1556
Registriert: 22 Jun 2012, 19:18

Re: .NET 3.5 Integration Windows 8.1

Beitrag von SisterOfMercy »

An other trick with .NET programs that only 'work' on older versions is to create a special .config file.
If your executable is stupidprogram.exe you create a file in the same directory that is called stupidprogram.exe.config
Put this in the file:

Code: Alles auswählen

<configuration>
   <startup>
      <supportedRuntime version="v4.5.50709"/>
      <supportedRuntime version="v4.0.30319"/>
      <supportedRuntime version="v3.5.21022"/>
      <supportedRuntime version="v3.0.4506"/>
      <supportedRuntime version="v2.0.50727"/>      
      <supportedRuntime version="v1.1.4322"/>
      <supportedRuntime version="v1.0.3705"/>
   </startup>
</configuration>
And remove a few versions. For instance I have .net 4 installed, and a boringprogram.exe wants .net 2, I change the boringprogram.exe.config to this:

Code: Alles auswählen

<configuration>
   <startup>
      <supportedRuntime version="v4.5.50709"/>
      <supportedRuntime version="v4.0.30319"/>
   </startup>
</configuration>
This may not always work, YMMV.
Bitte schreiben Sie Deutsch, when I'm responding in the German-speaking part of the forum!
highman72
Beiträge: 83
Registriert: 28 Sep 2008, 10:07

Re: .NET 3.5 Integration Windows 8.1

Beitrag von highman72 »

Hi Sister of Mercy,

was passiert, wenn Du "stupidprogram.exe" mit der .exe.config-Datei startest... Wird dann der Nutzer zur Installation von xy gefragt und muss ein Dialogfeld mit "Ja" bestätigen? Das passiert genau, wenn ich beispielsweise Paint.net zu installieren versuche, ohne vorher .NET 3.5 aktiviert zu haben. Das bremst eine vollständig automatische Installation dann aber aus.

Cool: Verstehst Du komplett deutsch aber antwortest in Englisch?

Grüße
Highman72
Antworten