0

Windows ユーザーの一時ディレクトリ (C:\Documents and Settings\User\Local Settings\Temp )、私の c# アプリで Process を使用します。

.NETのprcoessオブジェクトを掘り下げると、エラーコード5のwin32Exceptionが表示されるので、「アクセスが拒否されました」が原因でプロセスがエラーを返すと思います。

他の場所で同じことをすることは以前はうまくいったので、おそらくそれは私がすべきではないことだと思いますか? (%TEMP% でファイルを使用するプロセスを実行しています) おそらく何らかの方法でセキュリティを渡す必要がありますか?

4

2 に答える 2

1

通常の .NET (CF/Silverlight などではない) を使用していると仮定すると、ユーザーの一時領域内のファイルにアクセスすることが完全に想定されます。問題は、おそらく「使用」などを使用せずに、ファイルを作成した後に誤って開いたままにしたことではないでしょうか?

別のプロセスにシェルアウトするときに、環境変数 (%TEMP% など) を使用することはおそらくお勧めしません。理想的には、ファイルへのフル パスを渡します (間違いが少なくなります...)。パスの引数 (スペースの場合) を必ず引用符で囲んでください。つまり、引数は @"... ""c: \some path\whatever\tmp""..." (意味がわかれば)。

最後に、ファイルを抽出する場合は、既存のコンテンツについて考える必要があります。Path.GetTempFileName()単一のファイルのプレースホルダーを作成する場合は問題ありませんが、アーカイブを抽出する場合は、おそらくディレクトリを作成する必要があります-この目的にはGUIDが便利です(競合を回避しながら、後で削除することを忘れないでください):

string dir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
于 2008-11-03T10:21:12.217 に答える
0

コマンドライン(cmd)を使用して同じプロセスを実行すると、long-path-nameを使用してプロセスへのパス引数を指定したことが問題であることがわかりました。

これに対する解決策はここにあります:

.netでショートパスに変換する標準的な方法

于 2008-11-03T14:05:19.830 に答える