我有一个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