我有两台装有 Windows Server 2003 的计算机。一台计算机在网络上有一些共享文件夹,另一台计算机有一个 Windows 服务(用 C# 编写,在网络服务帐户下运行)需要访问这些共享文件夹。
以下代码作为登录用户工作正常,但在网络服务帐户下执行时会引发异常。
File.WriteAllText(@"C:\temp\temp.txt", File.ReadAllLines(@"\\NetworkServer\Test\test.txt")[0]);
Run Code Online (Sandbox Code Playgroud)
异常消息是Logon failure: unknown user name or bad password。如何让此代码在网络服务帐户下工作?它是 Windows Server 2003 中的一个设置,还是我需要为此添加一些代码才能使其工作?
我一直在尝试锁定文件,以便其他克隆服务无法访问该文件.然后我读取文件,然后在完成后移动文件.使用Move是允许的FileShare.Delete.
然而,在后来的测试中,我们发现如果我们查看网络共享,这种方法不起作用.我感谢我的方法可能不是最好的,但我的具体问题是:
为什么下面的演示对本地文件起作用,而不是针对网络文件?
您可以做得越好,因为我在搜索中发现的信息非常少,表明网络共享与本地磁盘的行为不同.
string sourceFile = @"C:\TestFile.txt";
string localPath = @"C:\MyLocalFolder\TestFile.txt";
string networkPath = @"\\MyMachine\MyNetworkFolder\TestFile.txt";
File.WriteAllText(sourceFile, "Test data");
if (!File.Exists(localPath))
File.Copy(sourceFile, localPath);
foreach (string path in new string[] { localPath, networkPath })
{
using (FileStream fsLock = File.Open(path, FileMode.Open, FileAccess.ReadWrite, (FileShare.Read | FileShare.Delete)))
{
string target = path + ".out";
File.Move(path, target); //This is the point of failure, when working with networkPath
if (File.Exists(target))
File.Delete(target);
}
if (!File.Exists(path))
File.Copy(sourceFile, path);
}
Run Code Online (Sandbox Code Playgroud)
编辑:值得一提的是,如果您希望在锁定到位时将文件从一个网络共享移动到另一个网络共享,则可以正常工作.在锁定时在同一文件共享中移动文件时,似乎只会出现此问题.
.Net 为我们提供了一个 FolderBrowserDialog 控件来浏览文件夹。然而,这是一个模式对话框。我需要创建一个可以放到表单上的用户控件。所以,我一直在考虑创建自己的,我需要在其中获取所有本地驱动器、映射网络驱动器、UNC 共享和 Web 文件夹(WebDAV/SharePoint)。我使用的是 Windows 7 和 .Net 4.0。
本地和映射网络驱动器
我可以从 DriveInfo.GetDrives() 获取本地驱动器。但是,这些仅向我显示可用/在线的驱动器。在 Windows 资源管理器中,您还会看到已断开连接/不可用的映射网络驱动器。
网络文件夹/UNC 共享
根据我目前所发现的,.Net 中似乎没有枚举 UNC 共享的机制。看来我必须使用 Interop 到 Win32 API 才能使用WNetOpenEnum和WNetEnumResource函数来枚举网络邻居。我得到了这个工作,但想知道是否有其他方法。
Web (WebDAV) 文件夹和 SharePoint
在 Windows 资源管理器中,我配置了几个 WebDAV 文件夹。使用上面相同的互操作调用WNetOpenENum,WNetENumResource我得到了一个节点“Web 客户端网络”,并且出现了已连接和可访问的 WebDAV 文件夹。
问题
WNetEnumResource要回我要“微软终端服务”的空节点。如何过滤掉这个,而不是基于英文文本过滤?WNetEnumResource不是我在创建它们时分配给它们的用户友好名称,而是采用 IP-Address@Port 格式,例如\\nnn.nnn.nnn.nnn@18123. 如何获取 Web 文件夹的用户友好名称?c# shared-directory network-share web-folders filesystem-browser
我正在尝试使用 New-NfsShare 命令创建网络共享,但我不断收到无效的命名空间错误。我从提供的例子中几乎是逐字逐句地写的,所以我不明白出了什么问题。
例子: New-nfsShare -Name "NFSshare01" -Path "C:\shares\NFSshare01"
我的代码: New-NfsShare -Name "LABS" -Path "C:\LABS" -Permission readwrite
有谁知道发生了什么?我已经将 NFS 模块导入到 Powershell 中,我什至尝试先创建目录,因为某些原因,该命令在进行网络共享之前无法创建该项目。我使用的是 Windows Server 2012 和 powershell 3.0 版
我有一个.NET 3.5应用程序,我希望在客户端的服务器上安装,并让工作站直接从网络共享运行它.我读过一些似乎暗示这并不像简单地将应用程序复制到网络共享那样容易,就像我对本机exe一样.不幸的是,似乎缺乏关于正确/最佳方式的文档(通过ClickOnce或其他方式).
那么,我将如何进行此类部署?我只是复制组件吗?ClickOnce有什么东西可以让我的生活更轻松,并促进未来的更新?(请记住,每个客户端的本地服务器上都有不同的安装点.)
到目前为止我所知道的:
显然,.NET框架必须安装在每个工作站上; 我想通过组策略安装它是这里的方法.
我还读过一些关于从需要完全信任的网络共享运行的内容,但后来我读到这可能不是3.5中的问题.有谁知道这里的确定答案?
IIS5正在SERVER1上运行.
IIS中的一个虚拟目录myfiles指向"另一台计算机上的共享位置",// SERVER2/myfilesshare
当我尝试访问该页面时: http:// SERVER1/myfiles
......我收到错误:
您无权查看此页面
HTTP 401.1 - 未经授权:登录失败
互联网信息服务
我已经在IIS中检查了"Connect As ..."设置.我用来访问共享的凭据是正确的 - 它们在连接到Windows资源管理器中的共享时工作,但不能通过IIS虚拟目录工作.我已经尝试在SERVER2中的文件夹上向Everyone授予完全权限,但没有运气.
有什么想法吗?
我有一个使用MS Access数据库(.mdb文件)的C#应用程序.我与网络用户共享我的数据库,以便他们可以使用我的应用程序访问数据库.
当我运行我的应用程序时,在网络数据库上执行查询需要更长的时间,而同一查询在本地计算机上花费的时间更少.
任何人都可以提供有关如何通过网络共享上的Access数据库减少此性能问题的建议吗?
c# ×4
.net ×2
credentials ×1
deployment ×1
file-locking ×1
iis ×1
ms-access ×1
powershell ×1
sharing ×1
web-folders ×1
windows ×1