2

ここで何が間違っていますか?

変数を確認しましたが、それらは本来あるべきものであるため、問題はありません。

ここで何か不足していますか?「デバイスの準備ができていません」という例外が発生するのはなぜですか?

コード -

if (ddlPublisherServer.Text != ddlSubscriberServer.Text)
{
   try
   {
       if (File.Exists("\\\\" + ddlSubscriberServer.Text + "\\SQLServerBackups\\" + txtSubscriberDatabaseName.Text + ".bak"))
       {
           File.Delete("\\\\" + ddlSubscriberServer.Text + "\\SQLServerBackups\\" + txtSubscriberDatabaseName.Text + ".bak");
       }

       File.Copy(@"D:\SQLServerBackups\" + txtSubscriberDatabaseName.Text, "\\\\" + ddlSubscriberServer.Text + "\\SQLServerBackups\\" + txtSubscriberDatabaseName.Text + ".bak");
       }
       catch (Exception ex)
       {
            ClientScript.RegisterStartupScript(GetType(), "Error!", "alert('" + ex.Message + "');", true);
            Logger.LogError(ex.Source, ex.TargetSite.ToString(), ex.Message);
            return;
       }
   }
4

1 に答える 1

5

問題は、マップされていないネットワークの場所にアクセスしていることです。ネットワークの場所にアクセスするときは、マップする必要があります (場合によっては、権限がある場合は自動的に行われますが、権限がない場合は自分で行う必要があります)。いくつかのオプションがあります:

  1. マップされたネットワーク ドライブを操作し、常にマップされていることを確認します (たとえば、グループ ポリシーやスタートアップ スクリプトを使用)。
  2. Process.Start を使用して「net use」コマンドを実行します (cmd を開いて「net use」と入力し、必要なものを確認します)。例えば:Process.Start("c:\\windows\\system32\\net.exe", "use \\\\servername\\location /user:domain\\username password");
  3. コードで偽装を使用して、ネットワークの場所にアクセスする前に、十分な権限を持つユーザーに偽装します。
于 2012-10-04T15:49:52.227 に答える