1

私は実際にwinzipのプロセスを開始してフォルダーを圧縮しようとしています。これは、vb で以下のコードを使用して行っています。

Dim startInfo As New System.Diagnostics.ProcessStartInfo
Dim pStart As New System.Diagnostics.Process
Dim tempFileName As String
Try
    startInfo = New System.Diagnostics.ProcessStartInfo( _
    "c:\Program Files\WinZip\WINZIP32.EXE")
    startInfo.Arguments = " -a -r ""c:\test.zip"" c:\test"
    startInfo.UseShellExecute = False
    startInfo.WindowStyle = Diagnostics.ProcessWindowStyle.Normal

    pStart.StartInfo = startInfo
    'startInfo.WorkingDirectory = "c:\Program Files\WinZip"
    'startInfo.FileName = "WINZIP32.EXE"
    pStart.Start()
    pStart.WaitForExit()
    
Catch ex As Exception
    Throw
End Try

これは、Windows アプリケーションのボタン クリック イベントに配置すると正常に機能します。しかし、Web アプリケーションのボタン クリック イベントで同じことが行われると、マシンのタスク マネージャーでプロセスが開始されていることがわかります。しかし、圧縮もアプリケーションの終了も、winzip の UI のポップアップも行いません。しかし、非常に少数のマシンでは、これで問題なく動作します。ほとんどのマシンで私は問題に直面しており、問題を一貫して再現することもできます...

しかし、同様のことを 7z zip を使用して試してみると、Web アプリケーション自体で問題なく動作します...

このプロセスの回避策はありますか?

4

2 に答える 2

2

.Net フレームワークには zip 機能が組み込まれていると思います。最初にそれらを使用してみます。Web サーバーのアクセス許可が原因で、zip プログラムが実行されていない可能性があります。

編集

確認したところ、System.IO.Compression の zip サポートが制限されているようです。しかし、この議論によると、それはあなたが必要としているものではないかもしれません. ただし、その議論では、「 Windows Shell API と C# を使用して Zip ファイルを解凍する」という記事について言及しています。

于 2008-12-12T22:02:35.530 に答える
1

IIS を実行しているユーザーに関係している可能性があります。app-pool を ID で実行するように変更して、機能するかどうかを確認してください。もちろん、winzip は UI ツールです。コマンドラインの zip ユーティリティを使用したほうがよいかもしれません... pkzip ;-p

個人的には、代わりに#ZipLibを使用することを検討します。これにより、マネージ コードで zip ファイルを操作できるようになります。

于 2008-12-12T13:52:37.173 に答える