我可以将Word文档附加到Windows应用程序吗?

3

我有一个Windows Forms应用程序,为此我已经在Word中编写了一份详尽的手册,并添加了有用的图片。是否有一种方法可以将.docx文件包含在.exe文件中,以便用户可以单击应用程序中的按钮,在Word中打开手册?


当然,你只需要将它包含在你的输出目录中,并使用 process.start 命令和 shell execute 打开它即可。 - rory.ap
2
@rory.ap 是正确的,不过我建议使用 PDF 而不是 Word 文档。这样你的用户更有可能能够阅读它。例如,我在使用的任何计算机上都没有 Word 的副本。 - adv12
我同意adv12的观点。将其转换为PDF格式。 - Zath
@adv12 这是非常好的建议,但这是我们公司内部工具,所以我可以确信 Word 已安装。 - Forklift
谢谢。我在这项技术上已经走得很远了,所以可能只能将其与.exe打包在一起,而不是切换技术。 - Forklift
显示剩余4条评论
1个回答

4

我认为你想要的是"嵌入"而不是"附加"。

是的,你可以通过将其存储为嵌入式资源来实现。

.NET Win32程序中嵌入资源有三种方式:

  • 作为Win32 PE资源。由于没有内置API(因此需要P/Invoke(DllImport)),因此无法轻松地从.NET代码中使用它们,但其他程序可以访问资源。
  • 作为直接存储的嵌入式资源流,可以使用.NET Framework中的Assembly.GetManifestResourceStream() API进行访问。这是最快的方法(因为它作为流而不是字节数组公开,因此不会不必要地加载到内存中)。
  • 作为.NET .resx/.resources资源中的Byte[]。这是次优的,因为文件被包装在另一个抽象中并公开为Byte[]而不是Stream,但你可以更轻松地在Visual Studio中管理文件。

我推荐使用GetManifestResourceStream方法,具体步骤如下:

  1. 在项目中,将Word文档包含在项目中(解决方案资源管理器>显示所有文件>(右键单击您的文档)>包含文件
  2. 选择该文件,然后打开属性,在“生成操作”下选择“嵌入的资源”
  3. 请注意,项目根相对文件夹路径将被转换为资源的点分隔名称前缀,因此如果文件是My Project\Documents\Readme.doc,则资源名称将为Documents.Readme.doc你可以覆盖这个,但你需要直接编辑你的.csproj文件(使用<LogicalName>元素)。
  4. 然后构建,你的*.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 中的 WordPad 不一定具有打开 .doc 文件的能力!在 Windows 7 及更高版本中,WordPad 只能打开 .docx 文件,并且仅支持少量格式选项,而在 Windows Vista 及更早版本中,WordPad 不支持打开 .docx 文件。
如果您想最大化兼容性,我建议使用 .pdf 文件以保留印刷页面格式和布局,或者使用 .rtf 文件。
如果此文件旨在构成帮助或文档文件,则应改用 .chm 文件,该文件经过结构化并得到了从 Windows 98 开始的所有 Windows 版本的完全支持 - 您还可以将 .chm 文件与 WinForms 集成,使用“这是什么?”按钮和工具提示(不要将 .chm 文件与在 Windows Vista 之后不受支持的 .hlp 文件混淆)。

1
我已经尝试过这个方法,虽然它有效,但我无法更新已成为“嵌入式资源”的文件。是否需要采取特殊措施才能更新docx或pdf文件? - shadonar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接