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

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),但这意味着其他程序可以访问这些资源 作为直接存储的嵌入式资源流,可以

我有一个Windows窗体应用程序,我已经用Word编写了一本内容广泛的手册,其中有一些有用的图片。是否有办法将.docx包含在.exe中,以便用户可以单击应用程序中的按钮打开Word中的手动?我想您的意思是“嵌入”

是的,您可以将其存储为嵌入式资源

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

  • 作为Win32 PE资源。这在.NET代码中不容易使用,因为它们没有内置API(因此需要P/Invoke(
    DllImport
    ),但这意味着其他程序可以访问这些资源
  • 作为直接存储的嵌入式资源流,可以使用.NET Framework中的
    Assembly.GetManifestResourceStream()
    API来访问它。这是最快的方法(因为它以
    而不是字节数组的形式公开,所以不会不必要地加载到内存中)
  • 作为.NET
    .resx
    /
    .resources
    资源中的
    字节[]
    。这是次优的,因为文件被包装在另一个抽象中,并以
    字节[]
    而不是
    流的形式公开,但是您可以在Visual Studio中更轻松地管理文件
我建议使用
GetManifestResourceStream
方法,因此请执行以下操作:

  • 在项目中,将Word文档包括在项目中(解决方案资源管理器>显示所有文件>(您的文档,右键单击)>包括文件
  • 选择文件,然后打开属性,在“构建操作”下选择“嵌入式资源”
  • 请注意,项目根相对文件夹路径将转换为资源的以点分隔的名称前缀,因此如果文件为
    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,是否需要做一些特殊的事情?