Benutzer mit den meisten Antworten
Task Manager, Win7 Pro-VS 2013Prem

Frage
-
Hallo,
ein weiteres Problem ist bei der Umstellung von XP auf Win7 aufgetaucht:
Ich habe einen Ordner, darin einige *.exe Programme und eine Datenbank *.accdb. Alle Programme arbeiten/verändern die Datenbank. Nun wollte ich eines dieser Programme in den Taskmanager einfügen, damit das Programm jeweils bei PC-Start abgearbeitet wird. Ergebnis: Es kommt die Fehlermeldung : Die Datenbank wird nicht gefunden. Lege ich diese aber in den Ordner ...windows\system32 - dann ist alles OK.
Das gefällt mir gar nicht ! Als Anfänger will ich nicht in diesem Ordner herumfuhrwerken, außerdem müßte ich dann auch die anderen Programme dort hin legen, damit die DB immer gefunden wird. Es sollen aber alle Komponenten in diesen einen Arbeitsordner liegen bleiben.
Was muß ich tun, damit der Taskmanager die Datenbank ebenfalls in diesem Arbeitsordner findet ?
Vielen Dank !
Hermann
Hermann-Sbg
Antworten
-
Hallo Hermann,
der Taskmanager ist eigentlich eine Anwendung, in der man die laufenden Prozesse, die Auslastung des Systems, ... sehen kann.
Was Du wahrscheinlich meinst, ist die Aufgabenplanung, oder?
So oder so: Die Datenbank (und andere Dateien) sollten nicht im Anwendungsordner abgelegt werden. Falls doch, musst Du den Pfad beim Start der Anwendung selbst ermitteln und diesen dann für den ConnectionString verwenden. Gibst Du den Pfad nicht an, wird das Arbeitsverzeichnis verwendet. Ist das nicht gesetzt, wird in der Regel C:\Windows\System32 verwendet. Und dort kann deine Datenbank nicht gefunden werden.
Leg die Datei daher bspw. in Environment.SpecialFolders.ApplicationData (oder einem anderen Ordner aus SpecialFolders, der dir besser erscheint) ab. Den Pfad kannst Du über:
Environment.GetFolderPath( Environment.SpecialFolder.ApplicationData )
ermitteln. Siehe dazu auch:
http://msdn.microsoft.com/de-de/library/system.environment.specialfolder.aspx
Willst Du die wirklich im Anwendungsordner ablegen, ermittele den Pfad bspw. so:
Path.GetDirectoryName( Application.ExecutablePath );
Empfehenswert ist das aber in den meisten Fällen nicht, schon gar nicht, wenn die Anwendung in ProgramFiles liegt, da normale Benutzer dort keine Schreibrechte haben.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Samstag, 14. Juni 2014 14:30
- Als Antwort vorgeschlagen Stefan FalzModerator Sonntag, 22. Juni 2014 15:28
- Als Antwort markiert Hermann-Sbg Sonntag, 22. Juni 2014 15:43
-
Hallo Hermann,
wenn das wirklich so bleiben soll (wovon ich abrate, da deine Anwendung dann auf neueren OS [ab Vista] nur mit Adminrechten laufen wird), müsstest Du letztendlich in der Aufgabenplanung für diese Aufgabe das Arbeitsverzeichnis auf C:\Programme\MySoftware setzen. Ich denke, das müsste im Reiter "Aktionen" im jeweiligen Task dann das Feld "Starten in (optional)" sein.
Alternativ kannst Du den Pfad im Programm selbst, wie schon geschrieben, per:
Path.GetDirectoryName( Application.ExecutablePath );
ermitteln. Der ConnectionString sähe dann bspw. so aus:String.Format( "Provider=Microsoft.ACE.OLEDB.12.0.; Data Source={0}\NamederDB.accdb"Path.GetDirectoryName( Application.ExecutablePath ) )
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Stefan FalzModerator Sonntag, 22. Juni 2014 15:28
- Als Antwort markiert Hermann-Sbg Sonntag, 22. Juni 2014 15:31
Alle Antworten
-
Hallo Hermann,
der Taskmanager ist eigentlich eine Anwendung, in der man die laufenden Prozesse, die Auslastung des Systems, ... sehen kann.
Was Du wahrscheinlich meinst, ist die Aufgabenplanung, oder?
So oder so: Die Datenbank (und andere Dateien) sollten nicht im Anwendungsordner abgelegt werden. Falls doch, musst Du den Pfad beim Start der Anwendung selbst ermitteln und diesen dann für den ConnectionString verwenden. Gibst Du den Pfad nicht an, wird das Arbeitsverzeichnis verwendet. Ist das nicht gesetzt, wird in der Regel C:\Windows\System32 verwendet. Und dort kann deine Datenbank nicht gefunden werden.
Leg die Datei daher bspw. in Environment.SpecialFolders.ApplicationData (oder einem anderen Ordner aus SpecialFolders, der dir besser erscheint) ab. Den Pfad kannst Du über:
Environment.GetFolderPath( Environment.SpecialFolder.ApplicationData )
ermitteln. Siehe dazu auch:
http://msdn.microsoft.com/de-de/library/system.environment.specialfolder.aspx
Willst Du die wirklich im Anwendungsordner ablegen, ermittele den Pfad bspw. so:
Path.GetDirectoryName( Application.ExecutablePath );
Empfehenswert ist das aber in den meisten Fällen nicht, schon gar nicht, wenn die Anwendung in ProgramFiles liegt, da normale Benutzer dort keine Schreibrechte haben.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Samstag, 14. Juni 2014 14:30
- Als Antwort vorgeschlagen Stefan FalzModerator Sonntag, 22. Juni 2014 15:28
- Als Antwort markiert Hermann-Sbg Sonntag, 22. Juni 2014 15:43
-
Hallo Stefan,
vielen Dank für deine Antwort. Du hast Recht, ich habe versucht, das Programm in Aufgabenplanung - WPD einzufügen. Deine Hinweise sind für mich aber völliges Neuland. Ich habe immer meine Programme und die ggf. dazu notwendigen Datenbanken in einem Ordner in C\Programme\MySoftWare eingefügt, sodass die Programme die DBs immer finden konnten. Der ConnectionString dazu lautet immer conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0.; Data Source=NamederDB.accdb). Ich möchte dabei (noch?) bleiben. Wie müsste also dieser conn (noch für diesen Sonderfall) für mein *.exe lauten, damit die DB noch in meinem Ordner C\Programme\MySoftWare verbleiben kann ? Ich habe deine Hinweise genau studiert, aber irgend etwas mache ich wieder einmal falsch.
Vielen Dank für deine Mühe !
Hermann
Hermann-Sbg
-
Hallo Hermann,
wenn das wirklich so bleiben soll (wovon ich abrate, da deine Anwendung dann auf neueren OS [ab Vista] nur mit Adminrechten laufen wird), müsstest Du letztendlich in der Aufgabenplanung für diese Aufgabe das Arbeitsverzeichnis auf C:\Programme\MySoftware setzen. Ich denke, das müsste im Reiter "Aktionen" im jeweiligen Task dann das Feld "Starten in (optional)" sein.
Alternativ kannst Du den Pfad im Programm selbst, wie schon geschrieben, per:
Path.GetDirectoryName( Application.ExecutablePath );
ermitteln. Der ConnectionString sähe dann bspw. so aus:String.Format( "Provider=Microsoft.ACE.OLEDB.12.0.; Data Source={0}\NamederDB.accdb"Path.GetDirectoryName( Application.ExecutablePath ) )
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Stefan FalzModerator Sonntag, 22. Juni 2014 15:28
- Als Antwort markiert Hermann-Sbg Sonntag, 22. Juni 2014 15:31
-
Hallo Hermann,
sind die Fragen geklärt? Falls ja, wäre es prima, wenn Du die Antworten bewerten und ggfs. auch als Antwort markieren würdest.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Stefan,
ja es ist geklärt - vielen Dank! Allerdings habe ich mehrere volle Tage gebraucht, um mich schlau zu lesen und vorallem um den conn-String so weit zu bringen, dass er vom Debuger endlich angenommen wurde. Daher habe ich mich noch nicht gemeldet - bitte um Nachsicht. Die Aufgabenplanung funktioniert auch, die Datenbank liegt jetzt in AppData, das *exe-File in C\Programme..
Nochmals Danke !
Gruß, Hermann
Hermann-Sbg