Directory.GetFiles() 找不到 BCP

Directory.GetFiles() Not Finding BCP

提问人:0xSingularity 提问时间:8/5/2023 更新时间:8/14/2023 访问量:137

问:

我正在 Azure VM 中测试我们的一个旧程序。我安装了 SQL Studio 和 SDK 以获取 BCP。该程序正在尝试用于获取 exe 的路径,并使用 ProcessStartInfo 启动它。但是,它不会返回任何文件,即使我可以在资源管理器中文件夹的子目录之一中看到 BCP。我假设这是一些 Azure 权限问题或 Windows 访问问题,因为该程序在我的机器上本地工作。有没有人对如何解决这个问题有任何见解或提示?Directory.GetFiles("C:\\Program Files\Microsoft SQL Server\", "bcp.exe", SearchOption. AllDirectories)

C# .NET Windows Azure IO

评论

0赞 Daredevil 8/6/2023
这可能是权限问题,正在运行的应用程序可能无权访问包含bcp.exe的目录。您是否以管理员身份运行 C# 程序?还可以尝试修改权限,向运行 C# 程序的用户授予对该目录的访问权限。
0赞 Nikolay 8/8/2023
@0xSingularity你忘了转义反斜杠Directory.GetFiles("C:\\Program Files\\Microsoft SQL Server\\", "bcp.exe", SearchOption. AllDirectories)
0赞 jcolebrand 8/11/2023
我同意您想在字符串之前使用 @ 或转义路径@Nikolay。您确定这是在服务器上找到该文件的路径吗?有时,您在桌面上获得的内容与您在服务器上获得的内容不同。

答:

0赞 VonC 8/7/2023 #1

你的问题确实可能与 Azure VM 上的权限有关,特别是因为你的程序在本地计算机上正常工作(除非,如评论所述,这是一个拼写错误,使用 used 而不是 )。
在 Azure 中,默认情况下,应用程序通常在受限用户帐户下运行,该帐户可能无权访问某些目录。它可能是一个访客帐户
\\\

以标准用户身份或在受限服务帐户下运行的应用程序可能没有对“C:\Program Files”目录及其子目录的读取访问权限。“”目录被视为系统目录,具有更严格的访问,以增强系统安全性。C:\Program Files

默认情况下,内置的 “” 组和 “” 帐户对此目录具有完全控制权,而内置的 “” 组具有读取和执行权限。
如果应用程序在不属于“”或“”组的用户帐户下运行,或者目录的权限已从其默认值更改,则应用程序可能无法读取此目录的内容。
您可能需要仔细检查目录的安全设置,以确认“”组具有预期的权限。
AdministratorsSYSTEMUsersAdministratorsUsersUsers

您可以尝试使用提升的权限运行应用程序(通常右键单击可执行文件并选择“以管理员身份运行”),只是为了确认权限问题。

还可以尝试一个简单的 Powershell 命令,看看是否存在相同的问题:

Get-ChildItem -Path 'C:\Program Files\Microsoft SQL Server\' -Recurse -Include 'bcp.exe' -File | Select-Object FullName
0赞 JustinDev 8/13/2023 #2

您是否比较了文本“Directory.GetFiles(”C:\Program Files\Microsoft SQL Server“, ”bcp.exe“, SearchOption.AllDirectories)“,以及您在本地计算机上拥有的内容?

您是否尝试过调试消息/日志记录以查看可能的问题?

您是否查看过目录/文件bcp.exe的权限,并与执行程序的用户进行了比较?

只是提供一些深思熟虑的意见。如果您可以提供有关此命令的上下文,可能会更有帮助,是否有可能由于看似无关的事情而在执行之前静默失败?

0赞 Frank Hagenson 8/14/2023 #3

传递给 GetFiles() 的路径未正确转义。 它需要是:

"C:\\Program Files\\Microsoft SQL Server\\"

@"C:\Program Files\Microsoft SQL Server\"