从另一个用户和域将文件写入某个位置

Posted

技术标签:

【中文标题】从另一个用户和域将文件写入某个位置【英文标题】:write files to a location from another user and domain 【发布时间】:2012-07-04 11:42:06 【问题描述】:

我正在开发一个控制台应用程序,它尝试通过登录从网站下载一些文件,然后将文件复制到共享文件夹。

我正在使用的域与我需要保存文件的共享文件夹的域不同。

目前我通过从运行中打开共享文件夹并将用户名和密码放入 Windows 身份验证对话框然后运行应用程序来手动解决此问题。

这是我正在使用的代码 -

 static public void Start()
        
            try
            
                serverpath = ConfigurationSettings.AppSettings["serverpath"];
                if (flag == 0)
                
                    username = ConfigurationSettings.AppSettings["UserNameFN"];
                    password = ConfigurationSettings.AppSettings["PassWordFN"];
                
                else
                
                    username = ConfigurationSettings.AppSettings["UserNameMFS"];
                    password = ConfigurationSettings.AppSettings["PassWordMFS"];
                    check = true;
                

                string webUrl = "https://www.website.org/";
                string formParams = string.Format("user=0&password=1", username, password);
                WebRequest req = WebRequest.Create(webUrl);
                req.ContentType = "application/x-www-form-urlencoded";
                req.Method = "POST";
                req.Proxy.Credentials = CredentialCache.DefaultCredentials;
                byte[] bytes = Encoding.ASCII.GetBytes(formParams);
                req.ContentLength = bytes.Length;
                using (Stream os = req.GetRequestStream())
                
                    os.Write(bytes, 0, bytes.Length);
                
                WebResponse resp = req.GetResponse();
                cookieHeader = resp.Headers["Set-cookie"];

             (ConfigurationSettings.AppSettings["UserNamePROD"], ConfigurationSettings.AppSettings["PassWordPROD"], ConfigurationSettings.AppSettings["DomainPROD"]);
                Directory.CreateDirectory(serverpath + @"Log\");
                Logging.Write_Line(DateTime.Now + " - File Transfer Started");
                if ((!check) || (count == 0))
                
                  string[] filename = getFileNames.returnFileNames(cookieHeader)
                
             

上面的代码

Directory.CreateDirectory(serverpath + @"Log\");这行抛出异常。

在我的机器上运行我的应用程序时,如何以编程方式登录到共享位置?

提前致谢:)

【问题讨论】:

嗨 akhil,你看过 PSExec 吗? technet.microsoft.com/en-us/sysinternals/bb897553.aspx它可以从服务器的上下文中执行一个控制台应用程序。 【参考方案1】:

我想我的评论就是我会提供的答案:

technet.microsoft.com/en-us/sysinternals/bb897553.aspx

请记住,我没有在我的机器上运行你的代码,但我猜你可以看到你可以运行 PSExec 作为测试并“弄清楚”如何将它用于你的目的。

我希望这是有用的。

【讨论】:

谢谢这真的很有帮助:)【参考方案2】:

您可以通过将目录创建命令作为 shell 进程执行来摆脱它,如下所示(提供完整的命名空间以避免using 指令使代码混乱):

System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = 
    new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; // Hides the command prompt window
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/C mkdir " + serverpath + @"\Log";
startInfo.Username = "domain\username";
startInfo.Password = // SecureString object containing the password
process.StartInfo = startInfo;
process.Start();

未经测试,但逻辑表明它可能有效。

【讨论】:

以上是关于从另一个用户和域将文件写入某个位置的主要内容,如果未能解决你的问题,请参考以下文章

python 如何将数据写入某个csv文件的特定位置?

如何根据位置将一些值写入ruby中的文本文件

当用户在“另存为”对话框中指定位置时,如何将文本写入文件?

从一个线程读取变量并从另一个线程写入的正确方法?

内核模块,在从一个进程调用时,从另一个进程写入页面

java 将页面内容写入excel文件中并可以将其下载到本地任意位置