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?
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()
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2039489414
Url: https://administrator.de/contentid/2039489414
Ausgedruckt am: 24.11.2024 um 03:11 Uhr
7 Kommentare
Neuester Kommentar
Frage ich mich ehrlich gesagt auch warum er das nicht vorher gleich dahin kopiert .
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.
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.
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.
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.
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.