我有一个Windows窗体应用程序,我在Word中编写了一本包含有用图片的大量手册。有没有办法在.exe中包含.docx,以便用户可以单击应用程序中的按钮以在Word中打开手动?
答案 0 :(得分:3)
而不是"附加"我认为你的意思是"嵌入"。
是的,您可以将其存储为嵌入式资源。
在.NET Win32程序中嵌入资源有三种方法:
DllImport
)),但这意味着其他程序可以访问资源。Assembly.GetManifestResourceStream()
API访问它。这是最快的方式(因为它作为Stream
而不是字节数组公开,所以它不会被不必要地加载到内存中。)Byte[]
/ .resx
资源中的.resources
。这不是最理想的,因为该文件包含在另一个抽象中,并以Byte[]
而不是Stream
公开,但您可以更轻松地管理Visual Studio中的文件。我推荐GetManifestResourceStream
方法,所以这样做:
My Project\Documents\Readme.doc
,则资源名称将为Documents.Readme.doc
。 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(除非您知道您的客户会拥有Word)。< / p>
请注意,Windows中的写字板不一定能够打开.doc
个文件!在Windows 7及更高版本上,写字板仅打开.docx
个文件,不支持所有格式化选项,只支持一小部分,Windows Vista及更早版本的写字板不支持打开.docx
个文件。
如果您想最大限度地提高兼容性,我建议您使用.pdf
文件,以保留打印页面格式和布局,或.rtf
文件。
如果此文件旨在构成帮助或文档文件,那么您应该使用.chm
文件,该文件由Windows 98以后的所有Windows版本构建并完全支持 - 您还可以集成{{ 1}}文件与WinForms一起使用&#34;这是什么?&#34;按钮和工具提示(.chm
文件不要与Windows Vista后Windows不支持的.chm
文件混淆。