2017-10-02 3 views
0

Ich mache ein Setup-Projekt in Visual Studio für meine Anwendung, und ich habe ein kleines Problem.sfx Pfad funktioniert nicht wie erwartet

Ich möchte eine große Menge von Dateien in einen Ordner kopieren (meine Dokumente -> TEST). Also habe ich eine stille Datei erstellt, die .exe mit WinRAR extrahiert. Wenn Sie auf diese Datei doppelklicken, erstellt sie automatisch den Ordner "FILES" in dem Ordner, in dem sie sich befindet, und saugt alles selbst in diesen Ordner.

Wenn Sie also die Datei files.exe doppelklicken, die sich in "D: \ Documents \ TEST" befindet, werden alle Dateien in "D: \ Documents \ TEST \ FILES" extrahiert.

Im Setup-Projekt habe ich Folgendes getan: -Ich habe dem Dateisystem den Ordner "Persönliche Datenordner des Benutzers" hinzugefügt und in diesem Ordner habe ich den Ordner "TEST" erstellt, und ich habe dort dateien.exe hinzugefügt. Ich habe eine benutzerdefinierte Aktion im Commit-Abschnitt erstellt, um die Datei files.exe auszuführen.

Aber wenn ich meine Anwendung installiere, erstellt es den Ordner "D: \ Documents \ TEST" korrekt, es kopiert die .exe-Datei dort, aber aus irgendeinem Grund erstellt es den Ordner "FILES" am Speicherort C: \ Windows \ SysWOW64 und extrahiert die Dateien dort in "C: \ Windows \ SysWOW64 \ FILES".

Wie kann ich das verhindern?

Vielen Dank für Ihre Hilfe.

Antwort

0

Wenn Sie etwas wie eine benutzerdefinierte Aktion von einer MSI-basierten Installation ausführen, ist das nicht dasselbe, als würde derselbe Code in der Umgebung des interaktiven Benutzers ausgeführt. Wenn Sie eine benutzerdefinierte Aktion ausführen, stammt das Arbeitsverzeichnis normalerweise vom Windows-Installerdienst, auf dem der Code ausgeführt wird. Es gibt keine Zauberei, die das Arbeitsverzeichnis automatisch so herstellt, wie es bei der ausführbaren Datei der Fall war. Dies bedeutet, dass jeder Code den genauen Pfad aller Dateispeicherorte angeben muss und nicht auf ein Arbeitsverzeichnis angewiesen ist. Es sieht also so aus, als ob der Code im Programm nur ein "FILES" -Verzeichnis erstellt, das im Arbeitsverzeichnis des Prozesses erstellt wird, welches der 32-Bit-Windows-Systemstandort ist.

Ich weiß nicht, ob Sie den Code geschrieben haben, und es ist nicht klar, warum Ihr Kommentar bezieht sich auf Umgebungsvariablen. Jeder .NET-Programmierer würde jedoch Environment.SpecialFolder.MyDocuments verwenden. Wenn Sie möchten, dass Windows Installer für den Standort bitten, Sie aus dieser Liste für die Personalfolder Eigenschaft fragen:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa370905(v=vs.85).aspx#system_folder_properties

und Ihre Frage sagt, dass Sie auf die „Eigene Dateien“ Ordner installieren, die Benutzer Personal Data Folders aus der Liste im Setup-Projekt (Dateisystem-Ansicht). Sie sollten also im Setup-Projekt in diesem Ordner installieren. Wenn Sie genauer erklären, was der Code tut und wie Sie ihn als benutzerdefinierte Aktion nennen, kann jede Antwort gründlicher sein.

+0

danke für Ihre Antwort. Aber soweit ich weiß, gibt es keine Umgebungsvariable für den Ordner "Meine Dokumente", daher weiß ich nicht, wie ich den genauen Speicherort dieses Ordners für meine SFX-Datei ermitteln kann. Irgendwelche Ideen? –

Verwandte Themen