以另一个用户身份打开文档

时间:2011-06-24 01:50:35

标签: c# .net vb.net winforms

如何以其他用户身份打开文档?

文档类型未知(可能是pdf,.xls,.doc,图像等)。 文档在网络共享,用户名,域和密码都是已知的。

我已经彻底研究了这个问题,我不相信这个问题已在这里得到解答。请证明我错了。

这个问题越来越近了 Open a shared file under another user and domain?

但不幸的是,它将文件打开到文件流,我需要在其关联的应用程序中打开该文件。

3 个答案:

答案 0 :(得分:1)

查看Runas

runas /user:somedomain\someuser "cmd /c start c:\somedocument.pdf"

位于C:\Windows\System32\runas.exe

要从C#应用程序打开它,您可以使用Process.Start和相应的标记。

修改

好吧,您可以完全跳过Runas的使用,因为Process.Start可以执行相同的工作,并且仍允许您根据需要指定密码(内部硬编码,或通过UI)。

只需使用cmd.exe /c start <pathToFile>通过shell启动文件及相关程序:

string cmdPath = Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.System),
    "cmd.exe");
string workingDirectory = @"C:\users\public";
string pathToFile = Path.Combine(workingDirectory, "somefile.png");
string arguments = string.Format("/c start {0}", pathToFile);
var password = new SecureString();
foreach (char c in "usersPassword")
    password.AppendChar(c);

var processStartInfo = new ProcessStartInfo()
{
    FileName = cmdPath,
    Arguments = arguments,
    WorkingDirectory = workingDirectory,
    UserName = "TestUser",
    Domain = Environment.MachineName, // Could use domain
    Password = password,
    UseShellExecute = false,
};
Process.Start(processStartInfo);

答案 1 :(得分:1)

您是否考虑过在本地复制文件并将其作为当前用户打开?

推理:

  • 我不知道任何本地允许以另一个用户身份打开文档的文档编辑应用程序。因此,您最好启动应用程序以另一个用户身份查看文档。
  • 并非所有应用程序在不同用户(即“运行方式”或CreateProcessWithLogonW)下在同一桌面上执行时表现正常,并且大多数处理与文档交互的应用程序未经过测试以在“运行方式”上下文中使用。
  • 如果另一个副本已经在同一台桌面上运行,某些应用程序会简单地忽略它试图在不同用户下启动的事实。

*桌面用于Win32意义上。

答案 2 :(得分:1)

您可以使用具有完全权限的服务器端Web服务,您可以尝试调用该Web服务以检查是否允许传递的用户编辑文档,如果是,则webservice可以检索该文档并将其发送。

这样你就可以在中间放置权限层/层,而不必在你的客户端应用上处理它。客户端应用程序只需发送用户名和webservice处理其余的