【问题标题】:EDITED: Where and how should download temp files?编辑:应该在哪里以及如何下载临时文件?
【发布时间】:2009-10-19 18:33:39
【问题描述】:

假设我想从网络上运行一个 exe,显然我宁愿将它下载到一个临时文件夹中......从那里运行它,然后删除它(或让操作系统这样做)。是否有任何约定如何做到这一点,同时确保不要轰炸权限问题,覆盖现有文件等?

谢谢。

EDIT 从桌面应用程序输入。 顺便说一句,我确实有很多猜测,但我只是想知道接受了什么。

我知道我可以使用Path.GetTempFile,但是它已经为我制作了文件,这让我认为它也可以将它添加到某个数据库中,并跟踪它 - 所以我不能删除它并且用我自己的文件替换它。

我知道我也可以使用Path.TempDirectory(或类似的东西)和Path.RandomFileName,但是后者在文件名中添加了一个随机扩展名,而我需要exe,显然这也可以很容易地解决,但是重写似乎 MS 已经尝试为我们编写的内容对我来说似乎很奇怪。

【问题讨论】:

  • 大多数时候,Web 浏览器不允许您从 Web 运行可执行文件。此外,您永远不会希望给用户一种印象,即永远只需从网络上运行可执行文件即可。 99.999% 的用户不会理解如何将您的应用程序与其他应用程序区分开来,因此只会记住一件事:“如果弹出消息要求运行应用程序,请按是。”瞬间失败。

标签: c# temporary-files


【解决方案1】:

我需要编写一个自我更新的 Windows 服务,并且发现自己处于类似的境地,我需要在执行之前将最新的安装程序下载到一个临时位置。没有太多关于该领域最佳实践的信息,因此我依赖于 ASP.NET/C# 提供的“工具”。

我使用 Path.GetTempPath() 和下载的文件名为下载的文件构建了完整路径。下面是一些示例代码:

string url = "http://www.domain.com/install.exe";
string path = Path.GetTempPath();
string fileName = Path.GetFileName(url);
string tmpFile = Path.Combine(path, fileName);

最重要的是,我认为您使用 System.IO.Path Temp* 函数的猜测是一种合理的方法——即使我找不到任何支持它的文档。

【讨论】:

  • 完美主义者,我想知道临时文件夹中是否已经存在这样一个通用名称..
  • 嗯,你应该努力保持你的文件名唯一。您可以使用 Path.GetTempFileName() 或 Path.GetRandomFileName() 来生成文件名。前者实际上会生成一个扩展名为 .tmp 的文件,您需要对其进行更改以满足您的需要。后者返回一个加密的强随机字符串,可用作文件夹名称或文件名。我希望这会有所帮助。
  • 是的。确实想打扰,但问题是,GetRandomFileName 返回一个带有随机扩展名的文件名。我可以轻松删除点并添加EXE,我别无选择?
  • 没有太多选择,但我建议使用 Path.ChangeExtension() 来更改扩展名,而不是自己编写逻辑。
【解决方案2】:

受信任的小程序可以使用用户的文件系统,所以你可以走这条路。您正在寻求 C# 建议,但如果语言灵活,这将适用于 Java 世界。

【讨论】:

    【解决方案3】:

    您可以查看Isolated Storage

    【讨论】:

      【解决方案4】:

      你看过ClickOnce Deployment吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-23
        • 1970-01-01
        • 1970-01-01
        • 2014-09-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多