Programm aus einer DLL sichtbar starten

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
andikad
Beiträge: 20
Registriert: So 11. Mai 2014, 03:41

Programm aus einer DLL sichtbar starten

Beitrag von andikad »

Hallo zusammen,

ich schreibe gerade eine kleine dll die als UDF in Firebird eingebunden werden soll. Jetzt will ich aus dieser DLL Winmerge starten und der Anwendung zwei Texte zum Vergleichen übergeben. Das klappt soweit auch, nur dass Winmerge immer für den User SYSTEM unsichtbar gestartet wird. Das Verhalten ist gleich, egal ob ich shell_execute oder WinExec verwende. Betriebssystem ist Win7 64 Bit.

Habt Ihr eine Idee?

Viele Grüße, Andreas

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Programm aus einer DLL sichtbar starten

Beitrag von Antrepolit »

andikad hat geschrieben:(...)
Habt Ihr eine Idee?
(...)

Ja, die habe ich tatsächlich: Poste Quellcode. ShellExecute hat diverse Parameter mit denen man das Anzeigeverhalten beeinflussen kann.
Grüße, Antrepolit

care only if your os is really burning

andikad
Beiträge: 20
Registriert: So 11. Mai 2014, 03:41

Re: Programm aus einer DLL sichtbar starten

Beitrag von andikad »

Antrepolit hat geschrieben:Ja, die habe ich tatsächlich: Poste Quellcode. ShellExecute hat diverse Parameter mit denen man das Anzeigeverhalten beeinflussen kann.


Der Aufruf sieht so aus:

Code: Alles auswählen

 
    WMArgs := format('/e %s %s', ['C:\Temp\LoadL.sql', 'C:\Temp\LoadR.sql']);
    ShellExecute(0, 'open', apppath, PChar(WMArgs), nil, SW_NORMAL);
 


Aus einer Desktopanwendung heraus funktioniert dieser Aufruf so. Kann es sein, dass Winmerge im Hintergund gestartet wird, weil der Aufruf der Funktion in der DLL vom Firebirdserver gemacht wird?

Viele Grüße, Andreas

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Programm aus einer DLL sichtbar starten

Beitrag von Antrepolit »

Oh, das habe ich überlesen. Als User 'System' solltest du gar kein WinMerge starten. 'System' führt nämlich die wichtigen Sachen aus, und da hat keine GUI-Anwendung was zu suchen. Darf man generell fragen, was du damit vor hast?
Grüße, Antrepolit

care only if your os is really burning

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Programm aus einer DLL sichtbar starten

Beitrag von Socke »

Antrepolit hat geschrieben:Oh, das habe ich überlesen. Als User 'System' solltest du gar kein WinMerge starten. 'System' führt nämlich die wichtigen Sachen aus, und da hat keine GUI-Anwendung was zu suchen.

In dem Fall könnte man die Datenbank doch als "normalen" User starten?
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

andikad
Beiträge: 20
Registriert: So 11. Mai 2014, 03:41

Re: Programm aus einer DLL sichtbar starten

Beitrag von andikad »

Antrepolit hat geschrieben:Darf man generell fragen, was du damit vor hast?


Wir haben eine Webanwendung zum Synchronisieren von Datenbanken geschrieben und würde Inhalte gerne mit Winmerge vergleichen. Hatten wir schon in der Desktopversion und fanden es besser als verschiedene webbasierte Diff-Bibliotheken.
Da ich keinen Weg gefunden habe, Winmerge von der Webanwendung aus zu starten, wollte ich jetzt mal den Weg über die Firebird-UDF probieren. In der Umgebung ist Winmerge auch nicht auf dem Client, sondern auf dem gleichen Server wie Firebird installiert. Könnte das Problem hier auch sein, dass die Anforderung ja vom Client ausgeht?
Habt Ihr eine andere Idee, wie sich das umsetzen ließe?

Viele Grüße, Andreas

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Programm aus einer DLL sichtbar starten

Beitrag von Socke »

andikad hat geschrieben:Wir haben eine Webanwendung zum Synchronisieren von Datenbanken geschrieben und würde Inhalte gerne mit Winmerge vergleichen. Hatten wir schon in der Desktopversion und fanden es besser als verschiedene webbasierte Diff-Bibliotheken.
Da ich keinen Weg gefunden habe, Winmerge von der Webanwendung aus zu starten, wollte ich jetzt mal den Weg über die Firebird-UDF probieren. In der Umgebung ist Winmerge auch nicht auf dem Client, sondern auf dem gleichen Server wie Firebird installiert. Könnte das Problem hier auch sein, dass die Anforderung ja vom Client ausgeht?

Wie soll denn der User auf WinMerge zugreifen?
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

andikad
Beiträge: 20
Registriert: So 11. Mai 2014, 03:41

Re: Programm aus einer DLL sichtbar starten

Beitrag von andikad »

Socke hat geschrieben:Wie soll denn der User auf WinMerge zugreifen?


Naja, Winmerge soll für den Benutzer mit den Vergleichsergebnissen sinchtbar geöffnet werden und auch bedienbar sein.

Viele Grüße, Andreas

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Programm aus einer DLL sichtbar starten

Beitrag von Socke »

andikad hat geschrieben:
Socke hat geschrieben:Wie soll denn der User auf WinMerge zugreifen?


Naja, Winmerge soll für den Benutzer mit den Vergleichsergebnissen sinchtbar geöffnet werden und auch bedienbar sein.

Wenn der Benutzer die Webanwendung verwendet, kann er nicht auf WinMerge auf dem Server zugreifen. Es sei denn, du überträgst WinMerge per Bild/VNC/X-Protokoll etc.
Eine Alternative wäre: WinMerge auf den Clients installieren und über ein Browser-Plugin aufrufen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Programm aus einer DLL sichtbar starten

Beitrag von marcov »

Ich würde mal createprocesasuser versuchen. Muss man aber irgendwie das korrekte Token finden (etwas Googlen nehme ich an)

Auch alle Files worauf Winmerge zugreift (und in besonders diejenige die es schreiben soll) mussen die korrekte Erlaubnisse haben.

Antworten