【问题标题】:Windows Forms Application: Add file on app InstallWindows 窗体应用程序:在应用安装时添加文件
【发布时间】:2015-01-09 15:17:23
【问题描述】:

我的 WF 应用程序需要一个 excel 文件才能正常工作。有没有办法将该文件添加到项目中,并且当用户安装我的应用程序时,它会自动将自己置于默认路径中?

谢谢

【问题讨论】:

  • Excel 文件是否会在运行时被应用程序更改(因此需要安装在对非管理员用户具有写入权限的目录中),或者它只是一个可以被从您决定放置的任何地方加载?如果是后者,我建议将其作为嵌入式资源包含在内,并在运行时直接从程序集中读取。

标签: c# windows winforms forms


【解决方案1】:

您可以将文件嵌入到可执行程序集中:

  1. 将文件添加到项目中。

  2. 在解决方案资源管理器中选择文件并打开属性 (F4)。

  3. 将“构建操作”设置为“嵌入式资源”。

  4. 在您的代码中,加载资源流并将其复制到目标文件流中:

    var assembly = Assembly.GetExecutingAssembly();
    using (var resourceStream = assembly.GetManifestResourceStream("YourNamespace.ExcelFile.xlsx"))
    using (var targetStream = File.OpenWrite("targetFile.xlsx"))
    {
        resourceStream.CopyTo(targetStream);
    }      
    

    确保YourNamespace 与您在项目中放置 Excel 文件的目录结构的命名空间相匹配。

This Knowledge Base article有详细的流程说明。

【讨论】:

  • System.Reflection.Assembly
  • 太棒了!完美运行!
【解决方案2】:

将文件添加到您的项目并将其构建操作设置为“如果较新则复制”。之后,它应该在安装应用程序时与您的二进制文件一起部署。但是请注意,此副本应被视为只读。

如果您需要在安装后保存对文件的更改,则将其复制到用户配置文件中的应用程序数据文件夹中:

var appDataFolder = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
var writableFilePath = Path.Combine(appDataFolder, "MyApplication\\MyExcelFile.xlsx");
// ensure directory exists before copying to it:
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(writableFilePath));

...并且只要它已经存在就使用这个文件而不是只读版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    相关资源
    最近更新 更多