Ich versuche, ein Programm zu machen, das nur eine einzige EXE-Datei hat. Das ist eine Voraussetzung.Erstellen Sie Datei mit FileOptions.DeleteOnClose, schreiben Sie darauf und sehen, dass es gelöscht wird nach
Aber ich muss auch Hilfe für dieses Programm implementieren, damit der Benutzer wissen kann, was was macht. Ich beschloss, eine chm-Datei zu erstellen und einen HelpProvider zu verwenden. Anfangs dachte ich, ich wäre in der Lage, die chm-Datei einzubetten und dem HelpProvider mitzuteilen, sie aus der resources.resx zu öffnen.
Nun, das hat nicht funktioniert.
Da ich keine anderen Optionen kenne, um Hilfe anzuzeigen, ohne dem Programm weitere Dateien hinzuzufügen oder Online-Hosting oder ähnliches zu verwenden, habe ich beschlossen, das eingebettete chm auf die Festplatte zu schreiben (wenn der Benutzer es öffnet)) und lösche es nachher (nachdem ich einen Weg gefunden hatte, dies im Speicher zu tun).
Das Problem besteht darin, die Datei mit dem FileOptions.DeleteOnClose
Flag zu erstellen und darauf zu schreiben. Wenn ich
File.Create(path, 100, FileOptions.DeleteOnClose);
File.WriteAllBytes(path, mychm);
Die Datei wird von der Create
Methode gesperrt. Wenn ich using
auf die Create
Methode setzen, wird die Datei vor dem Schreiben gelöscht.
'File.Create' gibt Ihnen einen' FileStream'. Benutze das nur zum Schreiben und behalte es in einem Feld, so dass der fragliche Stream keine Müllsammlung bekommt. Entsage es explizit, wenn du damit fertig bist. –
Es wird nicht fliegen. Ein Programm (wie hh.exe, der Hilfe-Viewer) muss diese Datei mit FileShare.Write und FileShare.Delete öffnen und das wird es nicht tun. Um Hilfe mit solchen unrealistischen Anforderungen zu bitten, ist nicht nützlich. –
Warum sollten Sie anstatt Hilfedatei erstellen und löschen ein anderes Projekt mit Hilfe erstellen und es in Ihre exe wie hier beschrieben: https://stackoverflow.com/questions/10137937/merge-dll-into-exe. – Nick