我正在尝试在位于windows用户临时目录的临时文件夹中的文件上运行命令行进程(即提取.7z存档) (C:\ Documents and Settings \ User \ Local Settings \ Temp),使用我的c#app中的Process。
我认为由于“拒绝访问”而发生的进程返回错误,因为当我深入研究.NET的prcoess对象时,我可以看到带有错误代码5的win32Exception。
在其他位置做同样的事情之前工作正常,所以我想也许这是我不应该做的事情? (运行进程以在%TEMP%上使用文件) 也许我需要以某种方式传递安全性?
答案 0 :(得分:1)
假设您使用的是常规.NET(不是CF / Silverlight等),完全可以访问用户临时区域中的文件。我想知道问题是不是因为你在创建文件之后意外地将文件打开了,可能是因为没有使用“使用”或类似文件?
我可能不建议在shelling到一个单独的进程时使用环境变量(%TEMP%等);理想情况下,你将传递文件的完整路径(更少的东西出错...),确保引用任何路径参数(如果是空格) - 即所以你的args是@“ ......“”c:\ some path \ whatever \ tmp“”......“(如果你明白我的意思)。
最后,如果要提取文件,则需要考虑现有内容。 Path.GetTempFileName()
可以用于创建单个文件占位符,但是为了提取存档,您可能想要创建一个目录 - guid对于这个目的很方便(同时避免冲突,并且记得在之后删除它):
string dir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
答案 1 :(得分:0)
使用命令行(cmd)运行相同的进程有助于弄清楚我的问题是我使用long-path-name为进程指定了路径参数。
可以在此处找到解决方案: