如何使用不同的用户帐户凭据在服务器上打开文件

时间:2014-04-18 14:28:52

标签: c# .net security .net-4.0 filesystems

我目前正在VS2012(.NET 4.0)中开发一个C#WinForms应用程序。该应用程序有点像电子邮件客户端,并显示一个消息列表。每条消息都可以附加一个或一个文件。 文件附件存储在不同的服务器上,只能使用其他用户帐户(而不是登录用户)访问。

当用户双击文件附件时,我需要打开文件并将其显示在关联的应用程序中。即记事本中的TXT文件,Word中的DOCX文件等

我希望我可以将完整的文件名传递给System.Diagnostics.Process.Start方法,并使用正确的用户名,密码和域值,它会打开相关应用程序中的文件。 例如

SecureString password = new SecureString();
"MyPassword".ToCharArray().ToList().ForEach(password.AppendChar);

System.Diagnostics.Process.Start(@"\\MyServer\MyFolder\MySubFolder\MyFile.docx",
                                 "MyUsername",
                                 password,
                                 "MyDomain");

但是消息引发异常: 指定的可执行文件不是此OS平台的有效应用程序。

我还尝试创建ProcessStartInfo对象实例,并将FileName属性设置为"Explorer.exe",将Arguments属性设置为@"\\MyServer\MyFolder\MySubFolder\MyFile.docx",然后传递给它作为System.Diagnostics.Process.Start方法的参数。但这也不起作用。不会抛出异常,也不会显示文件。

但是如果你查看System.Diagnostics.Process.Start方法返回的对象,你会发现InvalidOperationException已经发生。

我的C#问题是,当文件存储在只能使用不同用户凭据访问的服务器上时,如何打开并显示文件(在其关联的应用程序中)?

1 个答案:

答案 0 :(得分:0)

我认为这应该有用

步骤1.找到使用扩展程序注册的应用程序 步骤2.使用与上述相同的Api System.Diagnostics.Process.Start("来自当前计算机的应用程序,在步骤1和#34中找到;, @" \ MyServer的\ MyFolder文件\ MySubFolder \ MyFile.docx&#34 ;,                                  "名为myUsername&#34 ;,                                  密码,                                  " MYDOMAIN&#34);

请参阅以下链接,了解如何查找扩展程序的注册应用程序

How to get recommended programs associated with file extension in C#

http://www.codeproject.com/Articles/17023/System-File-Association