0

ネットワーク上で動作する win アプリケーションを作成しました。

そのフォームの 1 つで、ユーザーはローカル コンピューターからファイルを参照して選択し、それをリストに追加することができます。そのため、アプリケーションはこれらのファイルを、ユーザーがアクセスできないマイ ネットワーク内のフォルダーにコピーしますが、自分用に既に作成したフォルダーにコピーします。アプリケーションなので、彼のユーザー名とパスワードを持っています。ここまではすべて正常に機能します。

このフォームでは、ユーザーはファイルを選択して [開く] ボタンを押して開くこともできるため、ファイルはその拡張子に関連するアプリケーションで開く必要があります (たとえば、test.xlsx は Exel.exe で開く必要があります)。私は Process.Start を使用しました。 ()これを行うには、拡張機能ごとに個別のエラーが発生します(たとえば、メモ帳の場合は「アクセスが拒否されました」、AdobeReaderの場合は「実行時エラー」、Excelの場合は「メモリが不足しています」 )。

私の間違いは何ですか?

注 : ImpersonatUser を使用して、アプリケーションでそのユーザーにログオンしました。

編集:次のコードを使用してファイルを開きました:

Using(WindowsImpersonationContext impersonateUser = LogonMethod())
{
    ProcessStartInfo pInfo = new ProcessStartInfo(filePathWithExtension);
    pInfo.Domain = MyDomainName;
    pInfo.UseShellExecute = false;
    Process.Start(pInfo);
}

注 : 私の LogonMethod は、advapi32.dll の LogonUser メソッドを使用します。

4

2 に答える 2

0

この問題を解決できなかったため、別の方法を使用しました。ファイルを一時フォルダーにコピーしてから、Process.Startこの新しいファイルを開くために使用しました。

于 2012-07-09T05:21:09.553 に答える
0

表示されている動作は、ほぼ想定どおりです。

  • アプリケーションを直接起動していないようですが、ファイル名による関連付けを使用して評価しています。希望するアカウントでアプリケーションが起動されるとは思えません。タスクマネージャーを使用して、どのアカウントアプリケーションが実行されているかを確認できます。
  • ほとんどのアプリケーションは、「ru​​n as」コンテキストで実行するようにテストされていないため、正しく機能するか、ランダムに失敗する可能性があります。
于 2012-06-30T20:19:30.443 に答える