1

ログインして共有フォルダにファイルをコピーすることにより、Webサイトからいくつかのファイルをダウンロードしようとするコンソールアプリケーションに取り組んでいます。

ここで私が作業しているドメインは、ファイルを保存する必要がある共有フォルダーのドメインとは異なります。

現在、実行から共有フォルダーを開き、ユーザー名とパスワードを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\");この行は例外をスローします。

自分のマシンからアプリケーションを実行しているときに、プログラムで共有の場所にログインするにはどうすればよいですか?

前もって感謝します :)

4

2 に答える 2

1

私のコメントは私が提供する答えだと思います:

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

私は自分のマシンでコードを実行していないことを覚えておいてください。ただし、PSExecをテストとして実行し、目的に合わせて使用​​する方法を「理解」できることがわかると思います。

これがお役に立てば幸いです。

于 2012-07-04T11:54:24.980 に答える
0

次のように、ディレクトリ作成コマンドをシェルプロセスとして実行することで、これを回避できます(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();

テストされていませんが、ロジックはそれが機能する可能性があることを示唆しています。

于 2012-07-04T13:10:57.433 に答える