Как скопировать файл на клиентский компьютер удаленно?
string ff = @"C:\IpAdd\ipadd.txt"; string line; StreamReader file = new StreamReader(ff); while ((line = file.ReadLine()) != null) { try { NetworkCredential _readCredentail = new NetworkCredential(userName:"**", password:"**"); using (new NetworkConnection(line + @"\c", _readCredentail)) { string path = line + @"\c\" + @"ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"; File.Copy(path, @"\\192.168.*.**\fbar\TOOLS\ProbingApps\ProbingSystem\DesktopCopyTemp\EI_Startup.bat", true); } } catch (Exception ex) { Console.WriteLine(ex.Message); Console.ReadLine(); } } } public class NetworkConnection : IDisposable { string _networkName; public NetworkConnection(string networkName, NetworkCredential credentials) { _networkName = networkName; var netResource = new NetResource() { Scope = ResourceScope.GlobalNetwork, ResourceType = ResourceType.Disk, DisplayType = ResourceDisplaytype.Share, RemoteName = networkName }; var userName = string.IsNullOrEmpty(credentials.Domain) ? credentials.UserName : string.Format(@"{0}\{1}", credentials.Domain, credentials.UserName); var result = WNetAddConnection2( netResource, credentials.Password, userName, 0); if (result != 0) { // throw new Win32Exception(result, "Error connecting to remote share"); } } ~NetworkConnection() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { WNetCancelConnection2(_networkName, 0, true); } [DllImport("mpr.dll")] private static extern int WNetAddConnection2(NetResource netResource,string password, string username, int flags); [DllImport("mpr.dll")] private static extern int WNetCancelConnection2(string name, int flags, bool force); } [StructLayout(LayoutKind.Sequential)] public class NetResource { public ResourceScope Scope; public ResourceType ResourceType; public ResourceDisplaytype DisplayType; public int Usage; public string LocalName; public string RemoteName; public string Comment; public string Provider; } public enum ResourceScope : int { Connected = 1, GlobalNetwork, Remembered, Recent, Context }; public enum ResourceType : int { Any = 0, Disk = 1, Print = 2, Reserved = 8, } public enum ResourceDisplaytype : int { Generic = 0x0, Domain = 0x01, Server = 0x02, Share = 0x03, File = 0x04, Group = 0x05, Network = 0x06, Root = 0x07, Shareadmin = 0x08, Directory = 0x09, Tree = 0x0a, Ndscontainer = 0x0b } }
Что я уже пробовал:
Что не так с кодом, мне отказано в доступе.
Member 12599256
Другой вариант-использовать команду "NET USE" из командной строки. Запустите его с помощью процесса.Начнем с того, что это описание : http://www.howtogeek.com/118452/how-to-map-network-drives-from-the-command-prompt-in-windows/
Nigol_Learner
Я знаю, братан, просто я хочу, чтобы это было сделано на C#.
Garth J Lancaster
Полагаю, вы это замаскировали"\\192.168.*.**\fbar\ ... чисто для целей отображения здесь, на CP .. ? вы проверили учетные данные ? джентльмен, предложивший "сетевое использование", был в некотором смысле прав - проще сначала протестировать с помощью сетевого использования, а затем перевести в код
Я никогда такого не видел
var netResource = новый NetResource()
{
Scope = ResourceScope.GlobalNetwork,
ResourceType = ResourceType. Disk,
DisplayType = ResourceDisplaytype.Делиться,
RemoteName = сетевое имя
};
б / у-Я сделал очень похожее на карту диска, так что я посмотрю на эту технику
Garth J Lancaster
это fbar в этом "\\192.168.*.**\fbar\ установить как общую папку на удаленный сервер ?
Nigol_Learner
Использование "net use "для копирования просто отлично, и да, это общая папка" fbar". Я использую этот "public class NetworkConnection" для моего другого проекта, например, подсчитывает содержимое папки в клиентском ПК в определенном каталоге, он просто работает нормально, но теперь я использую для обработки файла с моего сервера fbar на мой клиентский ПК, я получаю отказ в доступе к моему клиентскому ПК.