rowdy146
Goto Top

Verknüpfung auf Programm im Homeverzeichnis per Skript bei Login

Hi Leute,

habe mal "das" (bekannte) Skript von bastla aufgegriffen

Const strProgramtitel = "Anwendung"
Const strProgram = "%USERPROFILE\anwendung\anwendung.exe"
Const strWPath = "%USERPROFILE%\anwendung" 'Arbeitsverzeichnis
Dim objShortcut
Dim objShell
Set objShell = WScript.CreateObject("Wscript.Shell")
strLPfad = objShell.SpecialFolders("Desktop")
Set objShortcut = objShell.CreateShortcut(strLPfad & "\" & strProgramtitel & ".lnk")
objShortcut.TargetPath = strProgram
objShortcut.Description = strProgramtitel
objShortcut.Arguments = strArg
objShortcut.WorkingDirectory = strWPath
objShortcut.Save

...und soweit auch an meinen Bedarf angepasst.
Die Schwierigkeit besteht darin, dass ich mit dem Skript für jeden User eine Verknüpfung auf die Anwendung setzen muss, die jeweils im Profilverzeichnis liegt.
Fragt bitte nicht warum, ist ne alte 16 Bit Anwendung und ich bekomme die Temp Dateien nicht ausgelagert, also kopiere ich es in jedes Profilverzeichnis.

Allerdings erhält die Verknüpfung dann auch genau die o.a. Pfade mit den Variablen für "Ausführen in" und "Arbeitsverzeichnis".
Kann man das korrigieren sodass dort hinterher auch der richtige Pfad mit Benutzernamen steht?

Kann man darüberhinaus auch noch ein Icon mit angeben? Hatte das schon versucht zu basteln, bin nicht sehr fit mit VB

Besten Dank für Eure Tips und viele Grüße

Oliver

Content-Key: 83407

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

Ausgedruckt am: 29.03.2024 um 01:03 Uhr

Mitglied: bastla
bastla 18.03.2008, aktualisiert am 18.10.2012 um 18:35:31 Uhr
Goto Top
Hallo rowdy146!

Eigentlich könntest Du Dir den Einsatz des Scripts sparen - erstelle einfach von Hand eine Verknüpfung für einen User, wobei Du die Pfade, wie bereits vorgesehen, mit "%USERPROFILE%" angibst und auch ein Icon dafür anlegst, und kopiere die entstehende Datei (Dateityp ist ".LNK") für jeden User.

Ansonsten gibt's eine ausführlichere Alternativvariante zu "dem" face-wink Script nochmals hier mit allen möglichen Einstellungen (also auch Icon-Zuordnung).

Grüße
bastla
Mitglied: rowdy146
rowdy146 18.03.2008 um 19:30:22 Uhr
Goto Top
Hallo bastla,

danke für den Tip.
Hatte ich so auch schon probiert (bin ich mir jedenfalls sicher)
Und das hats leider nicht getan.

Wenns einfacher als mit einem Script läuft bin ich gern für sowas zu haben.
Werde mich da morgen noch mal ransetzen...

MfG
Mitglied: rowdy146
rowdy146 19.03.2008 um 08:11:38 Uhr
Goto Top
So, ich nochmal...

Habe grade versucht, die Verknüpfung mit der Variable Username (auch Userprofile) zu füllen, das wird auch soweit akzeptiert.
Jedoch startet die Anwendung nicht.
Die Ereignisanzeige gibt nichts dazu aus und die DOS-BOX in der das Programm läuft schließt sich sofort wieder.


Hoffe, du hast noch ne Idee für uns.
Thx
Oliver
Mitglied: bastla
bastla 19.03.2008 um 10:12:54 Uhr
Goto Top
Hallo rowdy146!

Zunächst muss ich mich gleich einmal korrigieren: Bei einer 16Bit-Anwendung wird als Verknüpfung nicht eine ".LNK", sondern eine ".PIF"-Datei erstellt.

In den Eigenschaften dieser Verknüpfung kannst Du (zum Testen) im Register "Programm" den Haken bei "Nach Beenden schließen" entfernen - so siehst Du zumindest den Inhalt des CMD-Fensters.
Wie wurde das Programm eigentlich bisher gestartet, gab es schon jemals eine funktionierende Verknüpfung? Falls der Start über eine Batch-Datei im Programmordner vorzunehmen wäre, könnte man/frau auch dort ansetzen bzw auch einen eigenen Batch dafür verwenden.

Grüße
bastla
Mitglied: rowdy146
rowdy146 19.03.2008 um 10:35:34 Uhr
Goto Top
Hallo Bastla,

habe eben noch mal probiert...
Ich verknüpfe auf eine Batch Datei, die eine 16Bit Anwendung (in einer Dos-Box) startet.
Wenn ich auf die Batch per Rechtsklick in Windows eine Verknüpfung erstellen lasse, erhalte ich eine .LNK Datei.(So wird sie jedenfalls im Command Fenster angezeigt.
Den Reiter Programm erhalte ich leider nicht.

Das Programm war bisher problemlos lauffähig, nur mit günstigeren Vorraussetzung, dass es jeweils lokal auf dem Client lag.
Ich möchte es nun per Terminalserver verteilen, habe dabei aber das oben erwähnte Problem, dass ich es dafür jedem User exklusiv zur Verfügung stellen muss, da es nicht im Multiuser Modus läuft.

Hoffe, da ist etwas dabei wo man ansetzen kann.

Gruß
Oliver
Mitglied: bastla
bastla 19.03.2008 um 10:44:11 Uhr
Goto Top
Hallo rowdy 146!

Poste doch mal den Inhalt der Batch-Datei (diese wird übrigens nicht als 16Bit-Anwendung betrachtet, sodass die oben beschriebene Möglichkeit nur für die direkte Verknüpfung auf die ".exe" relevant wäre) und verwende dafür bitte -Tags.

Grüße
bastla
Mitglied: rowdy146
rowdy146 19.03.2008 um 11:09:56 Uhr
Goto Top
ich glaube nicht, dass dir der Batch Inhalt helfen wird.
ist das so mit den Code-Tags richtig?

@ECHO OFF
CLS
call land 049
:START
call cobset
xm +jr +r2 /p6 WEGOS000
IF EXIST SCHLUSS.DAT GOTO SCHLUSS
IF EXIST DIBO.DAT GOTO DIBO
IF EXIST OPTION.DAT GOTO OPTION
IF EXIST REB.DAT GOTO REB
IF EXIST STREAMER.DAT GOTO STREAMER
IF EXIST drucker.DAT GOTO drucker
IF EXIST FINANZ.DAT GOTO FINANZ
IF EXIST TAGESAB.DAT GOTO TAGESAB
IF EXIST UEBERG.DAT GOTO UEBERG
GOTO ENDUSE
:drucker
if EXIST drucker.SIK GOTO ENDE
REN drucker.DAT drucker.SIK
demo drucker
DEL drucker.sik
GOTO ENDE
:STREAMER
IF EXIST STREAMER.SIK GOTO ENDE
REN STREAMER.DAT STREAMER.SIK
CALL BAND
DEL STREAMER.SIK
GOTO ENDE
:REB
IF EXIST REB.SIK GOTO ENDE
REN REB.DAT REB.SIK
CALL REB.BAT
DEL REB.SIK
GOTO ENDE
:DIBO
IF EXIST DIBO.SIK GOTO ENDE
REN DIBO.DAT DIBO.SIK
DEMO DIBO
DEL DIBO.SIK
GOTO ENDE
:OPTION
IF EXIST OPTION.SIK GOTO ENDE
REN OPTION.DAT OPTION.SIK
DEMO OPTION
DEL OPTION.SIK
GOTO ENDE
:FINANZ
IF EXIST FINANZ.SIK DEL FINANZ.DAT
IF NOT EXIST FINANZ.DAT GOTO ENDE
REN FINANZ.DAT FINANZ.SIK
CD FIBU
CALL FP-START
GOTO ENDE
:TAGESAB
IF EXIST TAGESAB.SIK DEL TAGESAB.DAT
IF NOT EXIST TAGESAB.DAT GOTO ENDE
REN TAGESAB.DAT TAGESAB.SIK
CALL KASSE.BAT
DEL TAGESAB.SIK
GOTO ENDE
:UEBERG
IF EXIST UEBERG.SIK DEL UEBERG.DAT
IF NOT EXIST UEBERG.DAT GOTO ENDE
REN UEBERG.DAT UEBERG.SIK
CALL UEBERN.BAT
DEL UEBERG.SIK
GOTO ENDE
:SCHLUSS
DEL SCHLUSS.DAT
GOTO ENDUSE
:ENDE
goto START
:ENDUSE
ECHO OFF
CLS
:ENDTOT
Mitglied: bastla
bastla 19.03.2008 um 13:46:45 Uhr
Goto Top
Hallo rowdy146!

ist das so mit den Code-Tags richtig?
Fast - der "/" am Ende müsste unmittelbar vor "code" platziert werden.
Versuch einmal folgendes: Füge in der Batchdatei nach dem "@ECHO OFF" am Anfang folgende Zeile ein:
CD /D "%~dp0"  

Um ev Fehlermeldungen nachvollziehen zu können, wäre noch das "CLS" in der vorletzten Zeile durch "PAUSE" zu ersetzen - dadurch wird das CMD-Fenster erst nach Drücken einer Taste geschlossen (kannst Du natürlich später wieder entfernen).

Grüße
bastla
Mitglied: rowdy146
rowdy146 19.03.2008 um 13:55:45 Uhr
Goto Top
was bewirkt der befehl

cd /d usw ??
Mitglied: bastla
bastla 19.03.2008 um 14:13:03 Uhr
Goto Top
Hallo rowdy146!

Ein
cd /?
könnte Dir schon einmal eine erste Antwort geben ... face-wink

Mit der angegebenen Zeile stelle ich sicher, dass beim Starten der Batchdatei in das Verzeichnis, in dem sich die Batchdatei selbst befindet, gewechselt wird, da alle Programmaufrufe ohne Pfade angegeben sind und sich daher auf das gleiche Verzeichnis beziehen müssen.

Die Details zum "%~dp0" findest Du übrigens am Ende der Hilfe zu "for", wobei noch anzumerken wäre, dass "%0" für die Batchdatei selbst steht.

Grüße
bastla
Mitglied: rowdy146
rowdy146 19.03.2008 um 15:02:28 Uhr
Goto Top
Hallo Bastla,

ahem, ja "CD" halt face-smile - habs gecheckt...

Das Programm steigt wg. irgendwas anderem aus, scheint ein internes Problem zu sein, oder es kommt mit der Variable %USERNAME% in den Pfaden nicht klar.

Sobald ich die einbaue klappts nicht mehr.
Hab nun eben schon n anderen Verzeichnisbaum angelegt, um von dem langen "C:\Dokumente und..." wegzukommen (Stichwort 8.3)
Das bringt leider auch nichts.

Habe mir das andere gelinkte Skript von dir nochmal gegriffen und angepasst.
Funkt auch alles toll, aber warum ersetzt es beim Anlegen der Verknüpfung die Variable nicht mit dem dahinterliegenden Wert?
Schätze wenn das der Fall ist, läuft die Sache auch durch.

Haste noch ne Idee?
Mitglied: bastla
bastla 19.03.2008 um 15:58:16 Uhr
Goto Top
Hallo rowdy146!

... das andere gelinkte Skript von dir ...
Nur der Ordnung halber: Weder das eine noch das andere ist von mir (das zweite habe ich noch nicht einmal gepostet) - aber schön, dass Du mir's zutrauen würdest ... face-wink

Funkt auch alles toll, aber warum ersetzt es beim Anlegen der Verknüpfung die Variable nicht mit dem dahinterliegenden Wert?
Weil es so gewünscht war (und flexibler / sinnvoller ist).

Schätze wenn das der Fall ist, läuft die Sache auch durch.
Da habe ich so meine leisen Zweifel, da die Variable im Pfad eigentlich keine Rolle spielen dürfte - wenn die Batchdatei gestartet wird, wechselt diese ja ohnehin in das konkrete Verzeichnis. Schon eher ein Thema wäre es, tatsächlich nur kurze Namen im Pfad zu verwenden.

Anyhow: Mit VBS kannst Du den Pfad zum Benutzerprofil bzw dann den Programmpfad (zur Batchdatei) so bekommen:
strUserProfilePath = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%USERPROFILE%")  
strProgram = strUserProfilePath & "\Anwendung\Start.bat"  

Grüße
bastla