C# 我可以将Word文档附加到Windows应用程序吗?
我有一个Windows窗体应用程序,我已经用Word编写了一本内容广泛的手册,其中有一些有用的图片。是否有办法将.docx包含在.exe中,以便用户可以单击应用程序中的按钮打开Word中的手动?我想您的意思是“嵌入” 是的,您可以将其存储为嵌入式资源 在.NET Win32程序中嵌入资源有三种方法:C# 我可以将Word文档附加到Windows应用程序吗?,c#,winforms,ms-word,C#,Winforms,Ms Word,我有一个Windows窗体应用程序,我已经用Word编写了一本内容广泛的手册,其中有一些有用的图片。是否有办法将.docx包含在.exe中,以便用户可以单击应用程序中的按钮打开Word中的手动?我想您的意思是“嵌入” 是的,您可以将其存储为嵌入式资源 在.NET Win32程序中嵌入资源有三种方法: 作为Win32 PE资源。这在.NET代码中不容易使用,因为它们没有内置API(因此需要P/Invoke(DllImport),但这意味着其他程序可以访问这些资源 作为直接存储的嵌入式资源流,可以
- 作为Win32 PE资源。这在.NET代码中不容易使用,因为它们没有内置API(因此需要P/Invoke(
),但这意味着其他程序可以访问这些资源DllImport
- 作为直接存储的嵌入式资源流,可以使用.NET Framework中的
API来访问它。这是最快的方法(因为它以Assembly.GetManifestResourceStream()
而不是字节数组的形式公开,所以不会不必要地加载到内存中)流
- 作为.NET
/.resx
资源中的.resources
。这是次优的,因为文件被包装在另一个抽象中,并以字节[]
而不是字节[]
流的形式公开,但是您可以在Visual Studio中更轻松地管理文件
GetManifestResourceStream
方法,因此请执行以下操作:
My project\Documents\Readme.doc
,则资源名称将为Documents.Readme.doc
,但您需要直接编辑.csproj
文件(使用
元素)*.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
文件
如果要最大限度地提高兼容性,如果要保留打印的页面格式和布局,我建议使用.pdf
文件,或者使用.rtf
文件
如果此文件旨在构成帮助或文档文件,则应改用
.chm
文件,该文件由Windows 98以后的所有Windows版本构成并完全支持-您还可以使用带有“What's this?”按钮和工具提示的WinForms将.chm
文件集成到一起(.chm
文件不能与Windows Vista之后Windows不支持的.hlp
文件混淆).当然,您只需将其包含在输出目录中,然后使用process.start命令和shell execute从那里打开即可。@rory.ap是正确的,不过我建议使用PDF而不是Word文档。您的用户能够更好地阅读它。例如,我在使用的任何计算机上都没有Word的副本。添加文件e到您的资源中。然后您可以从那里引用它,它将在您创建安装项目时包括在内。我同意adv12。将它转换为PDF。@adv12这是一个非常好的建议,但它是我公司的内部工具,因此我可以确信Word已安装。我已经尝试过这个方法,尽管它有效,但我无法更新已安装的文件e“嵌入式资源”。为了更新docx或pdf,是否需要做一些特殊的事情?