C# 我可以在哪里存储从站点下载的可执行代码并运行它?

C# 我可以在哪里存储从站点下载的可执行代码并运行它?,c#,directory,add-in,C#,Directory,Add In,在我的C#应用程序中,如果我想从我们的网站下载一个“外接程序”并将其存储在用户的本地计算机上,然后运行它(假设它是一个程序集DLL或EXE,无所谓),我假设我无法将其存储在Program Files文件夹的子目录中,因为外接程序是特定于用户的,所以这并不是它的正确位置。我应该将这些存储在哪里,以及可能遇到哪些类型的信任/安全问题?当前用户的应用程序数据目录将是存储它们的一个位置 string basePath = Environment.GetFolderPath(Environment.Spe

在我的C#应用程序中,如果我想从我们的网站下载一个“外接程序”并将其存储在用户的本地计算机上,然后运行它(假设它是一个程序集DLL或EXE,无所谓),我假设我无法将其存储在Program Files文件夹的子目录中,因为外接程序是特定于用户的,所以这并不是它的正确位置。我应该将这些存储在哪里,以及可能遇到哪些类型的信任/安全问题?

当前用户的应用程序数据目录将是存储它们的一个位置

string basePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
basePath = System.IO.Path.Combine(basePath, "MyProgram");
if (!Directory.Exists(basePath))
  Directory.CreateDirectory(basePath);

安装后试图在程序文件中写入任何内容都会在Vista、Windows 2008 server、Windows 7及更高版本中遇到问题。当然,除非您的应用程序需要提升。您还提到,您的文件是针对每个用户的。

当前用户的应用程序数据目录将是存储它们的一个位置

string basePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
basePath = System.IO.Path.Combine(basePath, "MyProgram");
if (!Directory.Exists(basePath))
  Directory.CreateDirectory(basePath);

安装后试图在程序文件中写入任何内容都会在Vista、Windows 2008 server、Windows 7及更高版本中遇到问题。当然,除非您的应用程序需要提升。您还提到您的文件是针对每个用户的。

使用.NET中提供的IsolatedStorage类存储用户特定的内容


更多信息:

使用.NET中提供的IsolatedStorage类存储用户特定的内容


更多信息:

只需确保您下载的任何代码在运行之前都经过您的数字签名,否则您的用户将面临许多风险,例如,有人入侵您的网站或攻击您的用户DNS服务器,以使您的软件从错误的网站下载文件(还有更多风险)@Nir:如果我正在编写自己的外接程序,这很容易,但是如果我想允许第三方外接程序,我也需要对它们的所有密钥进行签名?只需确保您下载的任何代码在运行之前都经过您的数字签名,否则您将使您的用户面临许多风险,例如,有人入侵您的网站或攻击您的用户DNS服务器,使您的软件从错误的网站下载文件(风险更大)。@Nir:如果我正在编写自己的加载项,这很容易,但如果我想允许第三方加载项,我也需要在他们所有的钥匙上签名?有人想提供一个为什么这个方法比Brian的好或坏的原因吗?Scott,这没什么不同。我认为存储位置与Brian回答中使用的位置略有不同。一般来说,根据我读过的有关用户/应用程序特定数据的.NET书籍,这是推荐的。根据部署的系统,如果遇到使用Brian的方法可能不会遇到的问题,您可以更好地使用CAS允许特权使用IsolatedStorage。根据这一点:IsolatedStorage仍在ApplicationData文件夹中,所以我认为这是一个更好的答案。有人想提供一个为什么这个方法比Brian的好或坏的原因吗?Scott,这没什么不同。我认为存储位置与Brian回答中使用的位置略有不同。一般来说,根据我读过的有关用户/应用程序特定数据的.NET书籍,这是推荐的。根据部署的系统,如果遇到使用Brian的方法可能不会遇到的问题,您可以更好地使用CAS允许特权使用IsolatedStorage。根据这一点:IsolatedStorage无论如何都在ApplicationData文件夹中,因此我认为这是更好的答案。