Toon posts:

Meerdere programma's starten met tussentijdse registerwissel

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hey Tweakers,

Ik heb een freeware appje waarvan ik altijd 2 instances tegelijk wil runnen. Maar wel elke instance met een eigen specifieke instelling (die ik gemakshalve effe poortnummer noem). Het is een appje die het laatst gebruikte poortnummer opslaat in de registry. Ik weet ondertussen hoe ik dat standaard poortnummer via de registry kan manipuleren, zodat ik via een ingreep vooraf kan bepalen met welk poortnummer het appje opstart.

Het idee is:
1. Zet poortnummer 1 in de registry
2. Start de eerste instance (met dus poortnummer 1)
3. Zet vervoglens poortnummer 2 in de registry
4. Start de tweede instance (nu dus met poortnummer 2)

Om dit trachten te automatiseren heb ik de 2 registerinstellings varianten in een reg-file (sfz1.reg en sfz2.reg) gezet en het volgende batch-file gemaakt:

regedit /s d:\sfz\sfz1.reg
start /b d:\sfz\sfz.exe
regedit /s d:\sfz\sfz2.reg
start /b d:\sfz\sfz.exe

Helaas, dit werkt niet. Ik heb al allerhande varianten geprobeerd, maar het lijkt net of een batchfile pas bij het beeindigen van de batch alle voorkomende windows apps in één keer opstart. Helaas staat het register dan inmiddels op poortnummer 2, waardoor beide instances opstarten met poortnummer 2.

Overigens, als ik na het 1e start-commando een pause statement inbouw, werkt het wel (alleen wil ik er niet steeds aan te pas hoeven komen), kennelijk zorgt het pause statement ervoor dat de batchfile z'n opstart stack even uitvoert en leegmaakt voordat ie op pause springt.

Wie heeft er een goed idee?

Verwijderd

Verwijderd schreef op maandag 19 februari 2007 @ 16:08:
Hey Tweakers,

Ik heb een freeware appje waarvan ik altijd 2 instances tegelijk wil runnen. Maar wel elke instance met een eigen specifieke instelling (die ik gemakshalve effe poortnummer noem). Het is een appje die het laatst gebruikte poortnummer opslaat in de registry. Ik weet ondertussen hoe ik dat standaard poortnummer via de registry kan manipuleren, zodat ik via een ingreep vooraf kan bepalen met welk poortnummer het appje opstart.

Het idee is:
1. Zet poortnummer 1 in de registry
2. Start de eerste instance (met dus poortnummer 1)
3. Zet vervoglens poortnummer 2 in de registry
4. Start de tweede instance (nu dus met poortnummer 2)

Om dit trachten te automatiseren heb ik de 2 registerinstellings varianten in een reg-file (sfz1.reg en sfz2.reg) gezet en het volgende batch-file gemaakt:

regedit /s d:\sfz\sfz1.reg
start /b d:\sfz\sfz.exe
regedit /s d:\sfz\sfz2.reg
start /b d:\sfz\sfz.exe

Helaas, dit werkt niet. Ik heb al allerhande varianten geprobeerd, maar het lijkt net of een batchfile pas bij het beeindigen van de batch alle voorkomende windows apps in één keer opstart. Helaas staat het register dan inmiddels op poortnummer 2, waardoor beide instances opstarten met poortnummer 2.

Overigens, als ik na het 1e start-commando een pause statement inbouw, werkt het wel (alleen wil ik er niet steeds aan te pas hoeven komen), kennelijk zorgt het pause statement ervoor dat de batchfile z'n opstart stack even uitvoert en leegmaakt voordat ie op pause springt.

Wie heeft er een goed idee?
Batch bestandjes voeren alles in volgorde uit, echter is er 1 probleem. Batch bestandjes kijken niet of de applicatie die gestart is afgelopen is. Hierdoor word het progsel al gestart voordat je registrypatch klaar is of andersom :) In jouw geval is het patchen van registry sneller als het starten van je app. Hierdoor is je registry al gestart voordat je 1e app volledig klaar is.

Misschien dat je beter een VBScript kunt maken? En dan eventueel een while-loop waarin word gecontroleerd of de key al is aangemaakt?

[ Voor 3% gewijzigd door Verwijderd op 19-02-2007 18:05 ]


  • Drareg
  • Registratie: Februari 2004
  • Laatst online: 05-06-2025
Andere oplossing:
Je geeft zelf al aan dat de registrysettings nog niet weggeschreven zijn op het moment dat je de app start.
Je zou kunnen proberen:

Start /w regedit /s d:\sfz\sfz1.reg
start /b d:\sfz\sfz.exe
Start /w regedit /s d:\sfz\sfz2.reg
start /b d:\sfz\sfz.exe


op deze manier wacht het batchfile met uitvoeren van de volgende regel tot regedit klaar is

[ Voor 14% gewijzigd door Drareg op 19-02-2007 18:09 ]


  • Boogie
  • Registratie: Januari 2001
  • Laatst online: 09-11-2025
ff een pauze inlassen dan misschien?
http://malektips.com/xp_dos_0002.html

Verwijderd

Eff snel de nodige regels om zoiets te maken:

objShell.ShellExecute "regedit", "/s d:\sfz\sfz2.reg", "", "open", 1
do
regkey = WshShell.RegRead ("HKEY_CURRENT_USER\Software\..........")
Loop while not regkey="waarde van de key1"

objShell.ShellExecute "d:\sfz\sfz.exe", "", "d:\sfz\", "open", 1

objShell.ShellExecute "regedit", "/s d:\sfz\sfz2.reg", "", "open", 1
do
regkey = WshShell.RegRead ("HKEY_CURRENT_USER\Software\..........")
Loop while not regkey="waarde van de key2"

objShell.ShellExecute "d:\sfz\sfz.exe", "", "d:\sfz\", "open", 1

Nu heb je alleen nog het probleem dat als er iets mis gaat met in het register schrijven je wscript moet killen.

Verwijderd

Topicstarter
Verwijderd schreef op maandag 19 februari 2007 @ 18:03:
[...]

Batch bestandjes voeren alles in volgorde uit, echter is er 1 probleem. Batch bestandjes kijken niet of de applicatie die gestart is afgelopen is. Hierdoor word het progsel al gestart voordat je registrypatch klaar is of andersom :) In jouw geval is het patchen van registry sneller als het starten van je app. Hierdoor is je registry al gestart voordat je 1e app volledig klaar is.
Helaas, dit kan niet kloppen! Ik heb ook al een keer in de bat-file na elk commando een wait van 5 sec. gezet (wait.exe=freeware pause-appje) zodat je na elk commando 5 seconden pause krijgt. Ik zag dan keurig (met regedit open) m'n key op poortnummer 1 springen (binnen 5 sec.), vervolgens komt de start die er ook maar liefst 5 sec over mag doen, er gebeurt dus helemaal noppes, vervolgens komt er weer een nieuwe key in het register (doet er ook 5 sec. over), nog steeds geen applicatie. En dan..... eindelijk bij de laatste start: voilla......binnen een 10e van een seconde 2 instances actief van het betreffende appje sfz.exe

Verwijderd

Topicstarter
Verwijderd schreef op maandag 19 februari 2007 @ 18:14:
Eff snel de nodige regels om zoiets te maken:

objShell.ShellExecute "regedit", "/s d:\sfz\sfz2.reg", "", "open", 1
do
regkey = WshShell.RegRead ("HKEY_CURRENT_USER\Software\..........")
Loop while not regkey="waarde van de key1"

objShell.ShellExecute "d:\sfz\sfz.exe", "", "d:\sfz\", "open", 1

objShell.ShellExecute "regedit", "/s d:\sfz\sfz2.reg", "", "open", 1
do
regkey = WshShell.RegRead ("HKEY_CURRENT_USER\Software\..........")
Loop while not regkey="waarde van de key2"

objShell.ShellExecute "d:\sfz\sfz.exe", "", "d:\sfz\", "open", 1
Tsja, ik heb nog nooit wat met Visual Basic gedaan dus ik ben de syntax niet machtig.
Heb bovenstaande coding in een VBS bestand gezet en gerund. Krijg dan eerst commentaar op de syntax van de regel die begint met: Loop while not regkey=.

De betreffende key in de regfile is: "midiports"=dword:00000002

Ik heb dit geheel (incl. de dubbele quotes rond het woord midiports) tussen de dubbele quotes gezet (daar waar eerst: waarde van de key1 stond) Dat vindt de VB Interpretor niet zo fijn. Dus hoe moet je de quotes gebruiken? (Ik heb nu zelf de quotes rond het woord midiport weggehaald, maar of dit goed is???)

Vervolgens klaagt het ding over het feit dat er een object vereist is voor 'ObjShell'. Hetzelfde kan ik me voorstellen dat ie dit zal zeggen voor ObjShell.ShellExecute. Moet hier geen declaratie (of zoiets) plaatsvinden?

  • marcieking
  • Registratie: Februari 2005
  • Niet online

marcieking

Mannetje Pug en een stokbrood

Je zou programma kunnen downloaden (heet volgens mij wait.exe) dat als parameter een wachttijd heeft. Dus

regedit /s d:\sfz\sfz1.reg
Wait 1
start /b d:\sfz\sfz.exe
Wait 1
regedit /s d:\sfz\sfz2.reg
Wait 1
start /b d:\sfz\sfz.exe

https://onzetaal.nl/taaladvies/welke-die/


  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 22:52

Hero of Time

Moderator LNX

There is only one Legend

Ik geef je even een vbscript code die zeker werkt. Alle quotes staan al goed, tussen [ en ] moet je zelf ingeven waar het staat en welke waarde het moet zijn.

code:
1
2
3
4
5
6
Set WSHShell = CreateObject("WScript.Shell")
WshShell.RegWrite "[locatie van de key]", "[waarde]", "REG_DWORD" (of wat voor soort waarde het ook is)
WshShell.Run "[programma om te starten]"
WScript.Sleep [tijd in milisec dat het script wacht]
WshShell.RegWrite "[locatie van de key]", "[waarde]", "REG_DWORD"
WshShell.Run "[open tweede instance programma]"


Dit moet het doen. Opslaan als .vbs en runnen. Uiteraard het eerste commentaar tussen haken verwijderen.

[ Voor 4% gewijzigd door Hero of Time op 19-02-2007 20:25 ]

Commandline FTW


Verwijderd

Topicstarter
Het werkt nu. Ik heb nog wel even moeten pielen met de syntax van de RegWrite en de duur van de sleep. Maar met een sleep van 1/10e seconde werkt al perfect.

Het winnende script is geworden:
code:
1
2
3
4
5
6
Set WSHShell = CreateObject("WScript.Shell")
WshShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\rgc:audio software\microHost\sfz\midiports", "2", "REG_DWORD"
WshShell.Run "d:\sfz\sfz.exe"
WScript.Sleep 200
WshShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\rgc:audio software\microHost\sfz\midiports", "4", "REG_DWORD"
WshShell.Run "d:\sfz\sfz.exe"


Hero, you're a Hero, bedankt voor dit eenvoudige script (ben ik meteen van die reg-files af)

Maar ook de overigen natuurlijk bedankt voor het meedenken!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 22:52

Hero of Time

Moderator LNX

There is only one Legend

Graag gedaan. Ik heb met dit soort scriptjes op mijn stage zitten rommelen en die heb ik toen overgenomen naar mijn huis computer voor het geval ik er nog iets mee zou doen. Reuze handig om de source te bewaren. Ik heb het eigenlijk allemaal vanaf de MS KB site. Soms wil ik het ook wel eens gaan gebruiken, maar mijn ervaring met Norton brengt me weer met de vraag of mijn antivirus het wel leuk vind (kheb geen norton meer, gelukkig). Maar een manier om daar achter te komen en schijnbaar heb jij geen problemen ermee, zal ik het ook niet hebben.

Commandline FTW

Pagina: 1