以其他用户身份打开文档

本文关键字:文档 身份 其他 用户 | 更新日期: 2023-09-27 18:00:07

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

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

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

这个问题很接近是否在其他用户和域下打开共享文件?

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

以其他用户身份打开文档

检查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>通过带有相关程序的外壳启动文件:

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);

您是否考虑过简单地在本地复制文件并以当前用户身份打开它?

推理:

  • 我不知道有哪个文档编辑应用程序本机允许以另一个用户的身份打开文档。因此,您最好启动应用程序,以其他用户的身份查看文档
  • 并非所有应用程序在不同用户(即使用"运行方式"或CreateProcessWithLogonW)的情况下在同一桌面上执行时都能正常运行,而且大多数处理与文档交互的应用程序都没有经过测试,不能在"运行方式"上下文中使用
  • 如果另一个副本已经在同一桌面上运行,一些应用程序会忽略它试图在不同用户下启动的事实

*桌面是在Win32意义上使用的。

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

这样你就可以把许可层放在中间,而不必在你的客户端应用程序上处理它。客户端应用程序只需发送用户名,Web服务即可处理其余