我有一個Windows窗體應用程序,我已經在Word中使用有用的圖片編寫了大量的手冊。有沒有辦法在.exe中包含.docx,以便用戶可以單擊應用程序中的按鈕以在Word中打開手動?我可以將Word文檔附加到Windows應用程序嗎?
-1
A
回答
1
而不是「附加」我想你的意思是「嵌入」。
是的,您可以通過將其存儲爲嵌入式資源。
有三種方式嵌入資源.NET Win32程序:
- 作爲一個Win32 PE資源。這在.NET代碼中並不容易使用,因爲它們沒有內置API(因此您需要P/Invoke(
DllImport
)),但意味着其他程序可以訪問資源。 - 作爲直接存儲的嵌入式資源流,可以使用.NET Framework中的
Assembly.GetManifestResourceStream()
API訪問。這是最快的方式(因爲它暴露爲Stream
而不是字節數組,因此它不會不必要地加載到內存中)。 - 作爲
Byte[]
內的.NET.resx
/.resources
資源。這是次優的,因爲該文件被封裝在另一個抽象中,並作爲Byte[]
而不是Stream
公開,但您可以更輕鬆地管理Visual Studio中的文件。
我推薦的GetManifestResourceStream
方法,所以這樣做:
- 在你的項目中,包括在項目(Solution Explorer中的Word文檔>顯示所有文件>(您的文檔,右鍵單擊)>包括文件
- 選擇該文件,然後打開屬性和「生成操作」下選擇「嵌入的資源」
- 注意項目根相對文件夾路徑將被翻譯成你的資源點分隔的名稱前綴,所以如果文件是
My Project\Documents\Readme.doc
那麼資源nam e將是。 You can override this,但您需要直接編輯您的.csproj
文件(使用<LogicalName>
元素)。 - 然後構建,並且您的
*.doc
文件將被嵌入。
在你的代碼,這樣做:
// use a GUID generator to create a new GUID in a string literal (do not run `Guid.NewGuid()` or `new Guid()` at runtime!) to create a globally unique filename so you don't accidentally overwrite other files
const String _myFileName = "12345.doc";
static void ShellInvokeReadmeDocument() {
String destFileName = Path.Combine(Path.GetTempPath(), _myFileName);
if(!File.Exists(destFileName)) {
Assembly assembly = Assembly.GetExecutingAssembly(); // change as appropriate
using(Stream source = assembly.GetManifestResourceStream("Documents.Readme.doc"))
using(Stream destination = File.OpenWrite(destFileName)) {
source.CopyTo(destination);
}
}
Process.Start(destFileName);
}
請注意,我不建議使用.doc
或.docx
文件,因爲它不能保證用戶將安裝Word(除非你知道你的客戶將擁有它)。
請注意,Windows中的寫字板不一定有能力打開.doc
文件!在Windows 7和更高版本上,寫字板僅打開.docx
文件,並且不支持所有格式選項,只有一小部分子集,Windows Vista及更早版本的寫字板不支持打開.docx
文件。
如果要最大限度地提高兼容性,如果要保留打印頁面的格式和佈局,或者需要.rtf
文件,我建議使用.pdf
文件。
如果該文件是爲了構成幫助或文檔文件,那麼你應該使用一個.chm
文件,而不是,這是結構化的,並通過從Windows 98開始的所有Windows版本完全支持 - 你也可以集成與WinForms的.chm
文件「這是什麼?」按鈕和工具提示(.chm
文件不要與Windows Vista之後Windows不支持的.hlp
文件混淆)。
相關問題
- 1. 我可以將Word文檔
- 2. MFMailComposeViewController可以將XML文檔附加到HTML郵件嗎?
- 3. 在Windows 8 metro應用程序中,是否可以將附件附加到mailto應用程序?
- 4. 如何將Windows應用程序附加到我的C#應用程序?
- 5. 如何使用docx4j將文件附加到MS Word文檔?
- 6. 我可以將Windows CE應用程序移植到Windows Phone 8嗎?
- 7. 使用PHP將Word文檔添加到另一個Word文檔
- 8. 我可以以編程方式將我的應用程序添加到應用程序欄嗎?
- 9. 您可以將抽屜附加到Cocoa中的其他應用程序嗎?
- 10. 將數據從WPF應用程序傳輸到word文檔
- 11. .net應用程序將數據粘貼到word文檔中
- 12. 我可以將一個localizable.strings文件加載到iOS應用程序中嗎
- 13. 如何將windows窗體應用程序附加到.exe進程
- 14. 我可以使用Node.js讀取PDF或Word文檔嗎?
- 15. 我可以以任何順序將中間件應用到應用程序嗎?
- 16. 我可以將Web鏈接添加到XML文檔中嗎?
- 17. Log4Net可以附加到正確結構化的XML文檔嗎?
- 18. 可能附加到Android應用程序?
- 19. 爲什麼.NET XML將xlmns屬性附加到我添加到文檔中的XmlElements?我可以阻止它嗎?
- 20. 將文檔附加到iFrame
- 21. Windows 8 Metro風格應用程序 - 編輯Word文檔
- 22. 在Windows 8地鐵應用程序中打開word文檔
- 23. 在Windows應用程序中打開SharePoint Word文檔
- 24. 我可以將從Windows Phone 8.1安裝的應用程序傳輸到PC嗎?
- 25. 我可以將我目前的應用程序添加到In App Purchase中嗎?
- 26. 文件附加在word文檔中
- 27. 將Word文檔添加到Word應用程序而不保存到文件系統
- 28. 我可以添加DLL到Silverlight 3應用程序嗎?
- 29. 我可以添加頁腳到多個.net應用程序嗎?
- 30. 以編程方式將InkPicture添加到word文檔中
當然,你只需要將它包含在你的輸出目錄中,並使用shell執行的process.start命令從那裏打開它。 –
好的謝謝。我會研究一下。 – Forklift
@ rory.ap是正確的,但我推薦使用PDF而不是Word文檔。用戶有更好的機會閱讀它。例如,我在任何使用的計算機上都沒有Word的副本。 – adv12