enrixk
Goto Top

Datei austauschen per Powershell im laufenden Prozess

Hallo,

das untere Skript sorgt dafür, dass der Editor Visual Studio Code beim Benutzer gestartet wird. Beim ersten Start wird das Verzeichnis user-data unter H:\ angelegt, in das der Editor unter anderem benutzerspezifische Einstellungen in eine Datei mit dem Namen Settings.json speichert.

Ich möchte nun, dass nach dem Starten des Editors eine spezielle Settings.json angelegt wird, die ich vorkonfiguriert habe. Leider weiß ich nicht, wie ich das elegant lösen soll. Ich könnte ein Copy-Item cmdlet nach dem Start-Befehl (Zeile 20) einbauen, allerdings müsste der Benutzer bei dieser Lösung die aktive Instanz von Visual Studio Code erst wieder beenden, damit der Befehl ausgeführt wird.

Gibt es was eleganteres? Kann man die Settings.json vielleicht irgendwie während des laufenden Prozesses austauschen?

class VSCodeSetup{
	[string] $WorkingDir
	[string] $extensionsDir
	[string] $userDataDir
		
	VSCodeSetup([string]$workingDir,[string]$extensionsDir,[string]$userDataDir){
		$this.workingDir=$workingDir
		$this.extensionsDir=$extensionsDir
		$this.userDataDir=$userDataDir

		If(!(test-path -Path $this.WorkingDir)){
      		New-Item -ItemType Directory -Force -Path $this.WorkingDir
			New-Item -ItemType Directory -Force -Path $this.extensionsDir
	  		New-Item -ItemType Directory -Force -Path $this.userDataDir
		}	
	}

	[void] startVSCode(){
		$arguments=@("--extensions-dir=""C:\Program Files\Microsoft VS Code\ext""","--user-data-dir=""H:\vscode\user-data""")  
		& "C:\Program Files\Microsoft VS Code\bin\Code" $arguments  
	}

}
$workingDir="H:\vscode"  
$extensionsDir="C:\Program Files\Microsoft VS Code\ext"  
$userDataDir="H:\vscode\user-data"  

$start= [VSCodeSetup]::new($workingDir,$extensionsDir,$userDataDir)
$start.startVSCode()

Content-ID: 2039489414

Url: https://administrator.de/contentid/2039489414

Ausgedruckt am: 24.11.2024 um 03:11 Uhr

joehuaba
joehuaba 02.03.2022 um 07:55:07 Uhr
Goto Top
Guten Morgen face-smile

Sry, wenn ich auf dem Schlauch stehe, aber:
Warum kopierst du nicht die Settings, bevor du den Editor starten lässt? face-smile
1915348599
1915348599 02.03.2022 um 12:42:30 Uhr
Goto Top
Zitat von @joehuaba:
Warum kopierst du nicht die Settings, bevor du den Editor starten lässt? face-smile
Frage ich mich ehrlich gesagt auch warum er das nicht vorher gleich dahin kopiert face-smile.
Enrixk
Enrixk 03.03.2022 um 07:47:23 Uhr
Goto Top
Dann will ich mal das Geheimnis lüften:

Beim ersten Start erzeugt der Editor eine eigene vorkonfigurierte settings.json. Wenn diese durch mein Skript im Voraus abgelegt wird, gibt's 'ne Fehlermeldung ... bli bla blub file already exists.
joehuaba
joehuaba 03.03.2022 um 08:24:51 Uhr
Goto Top
Zitat von @Enrixk:

Dann will ich mal das Geheimnis lüften:

Beim ersten Start erzeugt der Editor eine eigene vorkonfigurierte settings.json. Wenn diese durch mein Skript im Voraus abgelegt wird, gibt's 'ne Fehlermeldung ... bli bla blub file already exists.

1. Editor starten lassen
2. Direkt wieder beenden
3. Datei kopieren
4. VS Code wieder starten

Wenn die Settings.json von VSCode im Zugriff ist, dann wirst du dich mit dem Austausch zur Laufzeit schwer tun.
Spontan fällt mir nichts anderes ein, sry.
1915348599
Lösung 1915348599 03.03.2022 aktualisiert um 08:41:58 Uhr
Goto Top
Dann suche nach dem Registry-Key oder Config-Entry der VSCode sagt das dies nicht der FirstStart ist dann sollte das trotzdem klappen. Meistens legen Anwendungen in der Registry oder dem Dateisystem einen Eintrag ab der der Anwendung sagt ob sie schon einmal gestartet wurde oder nicht.
Lass dir per Procmon eine Aufzeichnung machen dann siehst du was beim FirstStart passiert und kannst dann den entsp. Eintrag in deiner Anwendung selbst vor dem ersten Start setzen und so VSCode glauben lassen, dass es schon das erste mal gestartet wurde. Dann entfällt nämlich der Workaround mit erst mal so starten und killen und erneut starten.
Enrixk
Enrixk 03.03.2022 um 08:46:06 Uhr
Goto Top
Danke für die tolle Hilfe!
1915348599
1915348599 03.03.2022 aktualisiert um 09:53:54 Uhr
Goto Top
Keine Ursache, wenn du den entsprechenden Key/Stelle dann gefunden hast bitte hier auch noch als Ergebnis posten damit auch andere evt. davon was haben. Habe selbst gerade kein VSCode hier zum selbst testen.