C# 尝试打开远程文件位置但 Windows 未传递凭据

Posted

技术标签:

【中文标题】C# 尝试打开远程文件位置但 Windows 未传递凭据【英文标题】:C# trying to open remote file location but windows not passing credentials 【发布时间】:2015-10-27 02:51:54 【问题描述】:

所以,基本上我正在做的是尝试在远程工作站上打开 \\whatever\c$。我将首先说应用程序是使用<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 执行的 现在,当有人执行应用程序时,他们实际上使用的域和用户名/密码与用于登录工作站的不同。在应用程序中,我可以做任何我想做的事情。但现在我想要完成的是有一个指向 \whatever\c$ 的按钮链接,然后在资源管理器中打开它,这样我就可以查看一些文件,但是我不想每次都输入密码。特别是考虑到它与我用来打开应用程序的凭据相同。任何帮助,将不胜感激。这是我正在使用的当前代码。

            string startlocation = @"\\" + textBox1.Text + @"\C$";
            System.Diagnostics.ProcessStartInfo pcsi = new System.Diagnostics.ProcessStartInfo();
            pcsi.FileName = "explorer.exe";
            pcsi.Arguments = startlocation;
            System.Diagnostics.Process.Start(pcsi);

据我所知,这应该会自动传递打开应用程序时使用的凭据。但它仍然会打开 UAC 请求凭据。我被卡住了。

附言当我在 SO 上寻找类似情况时,我注意到很多其他人都在询问如何使用其他凭据打开它或冒充这不是我想做的。我想使用用于打开应用程序的凭据。

【问题讨论】:

【参考方案1】:

根据我的经验,Windows 未通过凭据的主要原因是服务器主体名称 (SPN),如果您不了解它们,请务必阅读。

【讨论】:

我阅读了this,但我不明白这如何适用于此。我不是在处理服务。 这只是一个想法,不确定它是否适用于您的场景。存在一种称为双跳问题,即凭据无法在服务器之间传递,这已由 SPN 纠正。见here 我没有任何需要管理员才能打开的本地文件夹,所以我无法真正测试本地。但我能做的是使用system.io.directory 之类的东西并做任何我想做的事情或system.io.file 并列出所有内容。如果不输入凭据,我似乎无法让资源管理器打开并向我显示内容。 我现在得走了,这里有一些想法。当您启动该过程时,您是否会在资源管理器的任务管理器下获得一个新行,并且旁边是否有用户名?也许微软参考here 中有一些内容,让您的应用程序使用硬编码到 ProcessStartInfo 对象中的用户名、密码和域将是一个开始。

以上是关于C# 尝试打开远程文件位置但 Windows 未传递凭据的主要内容,如果未能解决你的问题,请参考以下文章

C# Windows 服务无法将关闭事件记录到远程 API

C#:如何打开选择了多个文件的 Windows 资源管理器窗口

如何防止远程进程在 Windows 中被关闭?

如何使用 C# 在远程 Windows 机器上创建共享文件夹?

win10远程桌面开启了但无法连接

Windows 资源管理器中未显示文件大小