我有一个Windows Forms应用程序,为此我已经在Word中编写了一份详尽的手册,并添加了有用的图片。是否有一种方法可以将.docx文件包含在.exe文件中,以便用户可以单击应用程序中的按钮,在Word中打开手册?
我有一个Windows Forms应用程序,为此我已经在Word中编写了一份详尽的手册,并添加了有用的图片。是否有一种方法可以将.docx文件包含在.exe文件中,以便用户可以单击应用程序中的按钮,在Word中打开手册?
我认为你想要的是"嵌入"而不是"附加"。
是的,你可以通过将其存储为嵌入式资源来实现。
.NET Win32程序中嵌入资源有三种方式:
Assembly.GetManifestResourceStream()
API进行访问。这是最快的方法(因为它作为流而不是字节数组公开,因此不会不必要地加载到内存中)。.resx
/.resources
资源中的Byte[]
。这是次优的,因为文件被包装在另一个抽象中并公开为Byte[]
而不是Stream
,但你可以更轻松地在Visual Studio中管理文件。我推荐使用GetManifestResourceStream
方法,具体步骤如下:
My Project\Documents\Readme.doc
,则资源名称将为Documents.Readme.doc
。你可以覆盖这个,但你需要直接编辑你的.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(除非您知道您的客户将拥有它)。.doc
文件的能力!在 Windows 7 及更高版本中,WordPad 只能打开 .docx
文件,并且仅支持少量格式选项,而在 Windows Vista 及更早版本中,WordPad 不支持打开 .docx
文件。.pdf
文件以保留印刷页面格式和布局,或者使用 .rtf
文件。.chm
文件,该文件经过结构化并得到了从 Windows 98 开始的所有 Windows 版本的完全支持 - 您还可以将 .chm
文件与 WinForms 集成,使用“这是什么?”按钮和工具提示(不要将 .chm
文件与在 Windows Vista 之后不受支持的 .hlp
文件混淆)。