访问被拒绝尝试提取Windows用户临时文件夹中的档案

问题描述:

我试图在位于Windows用户临时文件夹中的文件上运行命令行进程(即提取.7z存档)temp目录 (C:\ Documents and Settings \ User \ Local Settings \ Temp),在我的c#应用程序中使用Process。访问被拒绝尝试提取Windows用户临时文件夹中的档案

我认为该过程返回的错误发生是因为“拒绝访问”,因为当我在.NET的prcoess对象中挖掘时,可以看到带有错误代码5的win32Exception。

在一些其他位置做同样的工作之前罚款,所以我想也许这是我不应该做的事情? (运行一个进程来使用%TEMP%上的文件) 也许我需要以某种方式传递安全性?

假设您使用的是常规.NET(而非CF/Silverlight等),则完全需要访问用户临时区域中的文件。我想知道这个问题是不是更多,你创建它后,意外地打开文件,也许没有使用“使用”或类似的?

我可能不会建议使用环境变量(%TEMP%等)时,脱壳到一个单独的进程;理想情况下,你会通过文件的完整路径(少得到错误的东西...),确保报价任何路径参数(如果空间) - 即所以你的参数是@“...”“ c:\ some path \ whatever \ tmp“”...“(如果你明白我的意思)。

最后,如果你正在提取文件,你需要考虑现有的内容。 Path.GetTempFileName()是罚款创建一个文件占位,但对提取档案,你可能需要创建一个目录 - GUID是适合完成这个purpoes(而avioding冲突,并记住事后删除):

string dir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); 
+0

感谢。原来是长路径名称。 。包围路径中的“解决它 另一种方式来创建临时目录名称是这个 做 { FOLDERNAME = Path.GetRandomFileName(); 路径= Path.Combine(Path.GetTempPath(),FOLDERNAME); } while(Directory.Exists(path)); – Hanan 2008-11-03 14:09:47

使用命令行(cmd)运行相同的进程帮助找出我的问题是我使用long-path-name为进程指定了路径参数。

解决这个可以在这里找到:

standard way to convert to short path in .net