Autor
|
Thema: vb.net: ClickOnce und Command (1819 mal gelesen)
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2657 Registriert: 06.11.2000
|
erstellt am: 07. Okt. 2015 11:31 <-- editieren / zitieren --> Unities abgeben:
Hi Experts Mal wieder eine Frage: Ich veröffentliche inzwischen praktisch alle meine betriebsintern genutzten Programme als ClickOnce-Anwendung. Das funktioniert super, Aktualisierungen werden sofort verteilt, ich brauche mir nicht mühsam ein Setup-Paket erstellen. Es hat natürlich auch Einschränkungen, mit denen ich aber bisher gut leben kann. Nun habe ich ein Problem: Ich habe ein paar Programme, die je nach Anwendungsfall sozusagen in verschiedenen Modi starten sollen. Wenn der Anwender direkt die Exe-Datei starten würde, dann könnte ich das einfach über die Kommandozeile erledigen, indem ich im Programm die Start-Parameter auswerte (--> Command) und dann entsprechend darauf reagiere. Bei der ClickOnce-Installation gibt's keine .exe-Datei, die ausführbaren Dateien sind irgendwo tief in %appdata% versteckt und der Pfad ändert sich mit jeder neuen Version, zu sehen ist nur der Programm-Link unter Start->Programme... Aber in diesem Link kann ich auch keine Parameter eintragen. Im Moment behelfe ich mir damit, dass das Programm nicht direkt über diesen Link, sondern über eine Batch-Datei aufgerufen wird. In der Batch-Datei wird eine temporäre Textdatei mit den entsprechenden Start-Parametern geschrieben, dann wird das Programm gestartet, das dann wiederum diese temporäre Textdatei auswertet. Die Frage ist nun: Gibt es eine Möglichkeit, bei ClickOnce-Anwendungen die althergebrachten Kommandozeilenparameter zu nutzen? ------------------ Klaus www.al-ko.com | mein Gästebuch [Diese Nachricht wurde von KMassler am 07. Okt. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Ehrenmitglied V.I.P. h.c. Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 07. Okt. 2015 13:38 <-- editieren / zitieren --> Unities abgeben: Nur für KMassler
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2657 Registriert: 06.11.2000
|
erstellt am: 07. Okt. 2015 15:05 <-- editieren / zitieren --> Unities abgeben:
Ich bekomme ja eben keine Parameter mit, da ich die nicht in der Kommandozeile übergeben kann. Bei .exe-Dateien könnte ich diese Startparameter im Programm auswerten und entsprechend darauf reagieren. Bei ClickOnce-Anwendungen kann ich das aber eben nicht. Es gibt natürlich andere Wege, wie schon beschrieben. Alle Beispiele habe ich bis heute per Batch-Datei gelöst, aber für die Zukunft suche ich einen Weg, die Kommandozeile zu nutzen- wenn's den gibt. Oder ich könnte einen Parameter in der Registry verstecken, dann bin ich aber nicht mehr flexibel. Am flexibelsten wäre das eben per Kommandozeile. Beispiele: Ich habe ein Programm zum Ausfüllen unseres Schriftkopfes, das ist so definiert, dass es 90% der Anwender in den unterschiedlichen Bereichen passt. Jetzt habe ich einen neuen Bereich dazu, der z.B. ein paar Felder mehr benötigt, andere dafür nicht. Das könnte ich jetzt, wenn es sich um eine herkömmliche .exe-Datei handeln würde, einfach mit einem Parameter starten, z.B. "Schriftkopf.exe /sonder". Oder in einem anderen Programm werden verschiedene Reiter einer TabPage ein- oder ausgeblendet. oder oder.... Anderes Beispiel: Ich habe ein Programm, mit dem ich Dateien und Daten an SAP übergebe. Im Standalone-Betrieb werde ich aufgefordert, die Datei auszuwählen und bestimmte Daten dazu einzugeben. Dasselbe Programm starte ich aus SolidWorks heraus mit Parameter /SWX (der wird von der Batch-Datei in die Temp-Datei geschrieben). Wenn dieser Parameter erkannt wird, dann wird die zu übergebende Datei aus SolidWorks automatisch erstellt und die erforderlichen Daten automatisch geschrieben, da muss ich dann nichts mehr eingeben. ------------------ Klaus www.al-ko.com | mein Gästebuch Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 778 Registriert: 18.05.2005 SolidWorks 2020 x64 SP3.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 21H1 Microsoft Office 365 ProPlus Microsoft Visual Studio Enterprise 2022
|
erstellt am: 07. Okt. 2015 18:03 <-- editieren / zitieren --> Unities abgeben: Nur für KMassler
Hallo Klaus https://robindotnet.wordpress.com/2010/03/21/how-to-pass-arguments-to-an-offline-clickonce-application/ Kleines Beispiel: Code: Public Sub main() Try If AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData IsNot Nothing Then Dim activationData As String() = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData For Each sCommandLineArgs As String In activationData Select Case sCommandLineArgs.ToLower Case "/d" MessageBox.Show("/d parameter", "parameter", MessageBoxButtons.OK, MessageBoxIcon.Information) Case "/a" MessageBox.Show("/a parameter", "parameter", MessageBoxButtons.OK, MessageBoxIcon.Information) Case Else MessageBox.Show("other parameter" & Environment.NewLine & sCommandLineArgs.ToString, "parameter", MessageBoxButtons.OK, MessageBoxIcon.Information) End Select Next Else MessageBox.Show("empty paramater", "parameter", MessageBoxButtons.OK, MessageBoxIcon.Information) End If Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub
Ausführen mit Parameter Code: "%appdata%\Microsoft\Windows\Start Menu\Programs\[ProgrammName]\[ProgrammName].appref-ms" /d
Gruss Andreas ------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2657 Registriert: 06.11.2000
|
erstellt am: 08. Okt. 2015 09:35 <-- editieren / zitieren --> Unities abgeben:
Ahoi Andreas, danke dir! Das scheint grundsätzlich zu funktionieren und wäre genau das was ich will Jetzt habe ich damit nur ein weiteres Problem: Beim Debuggen in der Entwicklungsumgebung gibts bei If AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData IsNot Nothing Then immer einen Ausnahmefehler, der springt dann immer zum Catch-Block. Darum habe ich #If DEBUG Then Debug = True #End If vorangestellt, dein Block soll dann nur ausgeführt werden, wenn Debug=False. Nur- irgendwas stimmt nicht, Debug ist auch True, wenn ich das außerhalb der IDE starte (Link, .exe-Datei) Gibts da irgendwelche Schalter einzustellen, damit #If DEBUG richtig ausgewertet wird? ------------------ Klaus www.al-ko.com | mein Gästebuch [Diese Nachricht wurde von KMassler am 08. Okt. 2015 editiert.] [Diese Nachricht wurde von KMassler am 08. Okt. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 778 Registriert: 18.05.2005 SolidWorks 2020 x64 SP3.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 21H1 Microsoft Office 365 ProPlus Microsoft Visual Studio Enterprise 2022
|
erstellt am: 08. Okt. 2015 11:41 <-- editieren / zitieren --> Unities abgeben: Nur für KMassler
Hallo Klaus Ich habe einmal ein neues Projekt erstellt, und da hatte ich den selben "Fehler". Erst nachdem ich das erste Mal auf "Jetzt veröffentlichen" geklickt habe, ging das Debuggen. Gruss Andreas ------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2657 Registriert: 06.11.2000
|
erstellt am: 08. Okt. 2015 13:06 <-- editieren / zitieren --> Unities abgeben:
Hi Andreas, das habe ich schon öfter gemacht. Erstellt, veröffentlicht..egal. Weder mit der .exe-Datei noch mit der veröffentlichten Anwendung erkennt der Blechdepp, dass ich nicht mehr debugge. Und während dem Debuggen des Debuggens bekomme ich immer den Ausnahmefehler. [Edit] Ich habe noch einen Tipp gefunden, wonach DEBUG immer True ist, egal, ob in der IDE oder im erstellten Projekt, wenn bei Erstellung oder Ausführung in den Projekteinstellungen unter "Kompilieren" die Konfiguration auf Debug steht. Aber ich konnte keinen Unterschied feststellen. Mehr noch: auch wenn ich die Konfiguration auf "Release" stelle und damit der Ausgabepfad auf bin\Release wechselt, wird trotzdem alles unter bin\Debug erstellt. Seltsam... [/Edit] ------------------ Klaus www.al-ko.com | mein Gästebuch [Diese Nachricht wurde von KMassler am 08. Okt. 2015 editiert.] [Diese Nachricht wurde von KMassler am 08. Okt. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 778 Registriert: 18.05.2005 SolidWorks 2020 x64 SP3.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 21H1 Microsoft Office 365 ProPlus Microsoft Visual Studio Enterprise 2022
|
erstellt am: 08. Okt. 2015 13:54 <-- editieren / zitieren --> Unities abgeben: Nur für KMassler
Hallo Klaus Ich habe es nochmals geprüft. Wenn ich im Register "Sicherheit" die ClickOnce-Sicherheitseinstellungen aktiviere, komm der Fehler nicht. Gruss Andreas ------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2657 Registriert: 06.11.2000
|
erstellt am: 08. Okt. 2015 14:10 <-- editieren / zitieren --> Unities abgeben:
Den habe ich immer aktiv. Jetzt habe ich eine Möglichkeit gefunden, zu unterscheiden, ob das Programm in der IDE (Debugging) oder solo läuft: Dank an Wael Dalloul bei StackOverflow Aber: wenn ich die Exe-Datei ohne Parameter direkt starte (Debugging=false), dann wird der Block durchlaufen und der Fehler kommt trotzdem wieder. Bei der Click-Once-Anwendung klappt's. Jetzt müsste ich also zusätzlich noch unterscheiden, ob das Programm als ClickOnce-Anwendung läuft oder ob die Exe-Datei gestartet wurde... ------------------ Klaus www.al-ko.com | mein Gästebuch [Diese Nachricht wurde von KMassler am 08. Okt. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2657 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** Dell Precision 7540 mobile Workstation, 64GB, Quadro RTX 3000; SWX2020 SP5; SAP/PLM+ECTR; DriveWorks Pro; Programmierung: VBA, aktuell Visual Studio 2017/VB.Net
|
erstellt am: 26. Okt. 2015 14:34 <-- editieren / zitieren --> Unities abgeben:
Ok, soweit läufts. Nun habe ich festgestellt, dass activationData nur den ersten Parameter enthält, egal wie viele Parameter in der Befehlszeile stehen. Wenn das Programm z.B. aufgerufen wird mit <ProgrammName>.appref-ms" /1 /2 /3 dann enthält activationData nur den Parameter /1 Für meinen Zweck tut's das, ich brauche im Moment nicht mehr, aber komisch ist das schon ... ------------------ Klaus www.al-ko.com | mein Gästebuch Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|