- ひろれい
- ぬし
- 会議室デビュー日: 2006/03/02
- 投稿数: 486
- お住まい・勤務地: 万博開催地
|
投稿日時: 2006-04-10 10:02
現在、以下の環境で開発しております。
・ASP.NET(VB.NET)<VS.NET2003>
・IIS5.1
・.NET Framework1.1
・WindowsXP Pro
・UNLHA32.DLL(Ver.2.02.5.23)<system32フォルダ内>
当初、サーバ上で作成した複数のExcelファイルをZIP形式で圧縮し、圧縮したZIPファイルをクライアントにダウンロードさせる仕組みを考えていたのですが、クライアントの環境ではZIPファイルを解凍できないことが判明しました。
圧縮解凍ソフト、もしくは UNZIP.DLL のインストールが出来ないかと依頼しましたが、全ての端末が同一環境で設定してあるため、簡単にはインストール出来ない、との理由のため、今回、サーバ側で自己解凍書庫を作成し、クライアントにダウンロードさせるよう変更することになりました。
解決済・自己解凍書庫の作成方法
を参考に試していますが、上記URL と同様、応答が無く、原因がつかめなくて困っています。何かお気づきの点がありましたら、ご指摘いただきたいと思います。
コード: |
|
Public NotInheritable Class UnLha32
' UNLHA32.DLL定義<UNLHA関数を利用>
<System.Runtime.InteropServices.DllImport("UNLHA32.DLL", CallingConvention:=Runtime.InteropServices.CallingConvention.StdCall)> _
Private Shared Function Unlha(ByVal lo_hWnd As Integer, _
<System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPTStr)> ByVal ls_CmdLine As String, _
<System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPTStr)> ByVal ls_OutPut As String, _
ByVal li_Size As Integer) As Integer
End Function
' 圧縮
Public Overloads Shared Function Start(ByVal ls_LZHFile As String, ByVal ls_LZHDir As String, _
ByVal ls_OutDir As String) As Integer
Dim ls_Command As String
Dim li_Return As Integer
Try
ls_Command = "a -gw4 -xr1 -gm1 D:\ASPNET\test\page\zip\\Archive D:\ASPNET\test\page\excel\ *.xls"
li_Return = Unlha(0, ls_Command, Nothing, 0)
Return li_Return
Finally
End Try
End Function
End Class
|
li_Return = Unlha(0, ls_Command, Nothing, 0) の箇所で応答が無くなります。
最終的には、コマンド等は呼び元から渡すようにしようと考えていますが、現在は確認中のため、直接フルパスで指定しています。
上記URL では、お2人ともフォルダの権限が原因だったため、私の方でもそれが原因の可能性が高いと考えておりますが、以下のフォルダに権限を与えてもダメな状態です。
D:\ASPNET\test\page\\zip
D:\ASPNET\test\page\\excel
に、「ASPNET」「IUSR_マシン名」の両ユーザにフルコントロール権限を与えています。
また、SYSTEM32 フォルダ内の「UNLHA32.DLL」に対して、上記2ユーザに「読み取りと実行」権限を与えています。
よろしくお願い致します。
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-04-10 10:19
引用: |
|
ひろれいさんの書き込み (2006-04-10 10:02) より:
上記URL と同様、応答が無く、原因がつかめなくて困っています。
何かお気づきの点がありましたら、ご指摘いただきたいと思います。
|
まず、引用符で括られていないのが気になります。
最後のところ、パス区切り文字で終わっていたりしていますから。
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- ひろれい
- ぬし
- 会議室デビュー日: 2006/03/02
- 投稿数: 486
- お住まい・勤務地: 万博開催地
|
投稿日時: 2006-04-10 11:21
引用: |
|
じゃんぬねっとさんの書き込み (2006-04-10 10:19) より:
まず、引用符で括られていないのが気になります。
最後のところ、パス区切り文字で終わっていたりしていますから。
|
じゃんぬさん、お返事ありがとうございます。
ls_Command = "a -gw4 -xr1 -gm1 " & Chr(34) & "D:\\ASPNET\\test\\page\\zip\\Archive" & Chr(34) & " " & Chr(34) & "D:\\ASPNET\\test\\page\\excel\\" & Chr(34) & " " & "*.xls"
に変更してみましたが、ダメでした。もしかしたら、パラメータがおかしいのかと思い、
ls_Command = "a " & Chr(34) & "D:\\ASPNET\\test\\page\\zip\\Archive" & Chr(34) & " " & Chr(34) & "D:\\ASPNET\\test\\page\\excel\\" & Chr(34) & " " & "*.xls"
でも試してみましたが、やはりダメでした。
LHA.EXE でパラメータなしで実行すると LZHファイルが作成されるので、Web から実行する際の問題だと考えています。
ちなみに、実行する際は一応、タスクマネージャで「aspnet_wp.exe」を再起動しています。
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-04-10 11:25
引用: |
|
ひろれいさんの書き込み (2006-04-10 11:21) より:
LHA.EXE でパラメータなしで実行すると LZHファイルが作成されるので、Web から実行する際の問題だと考えています。
|
だとすれば、ディレクトリ権限の問題のように思えるのですが...
絶対 "確かな" 場所同士で Web から実行してみてもダメでしょうか?
それと、パス区切り文字が 2 箇所連続しているところがあるのが気になります。
VB では全然問題ないのですが、API 側では予期していないことがあります。
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- ひろれい
- ぬし
- 会議室デビュー日: 2006/03/02
- 投稿数: 486
- お住まい・勤務地: 万博開催地
|
投稿日時: 2006-04-10 11:59
引用: |
|
じゃんぬねっとさんの書き込み (2006-04-10 11:25) より:
だとすれば、ディレクトリ権限の問題のように思えるのですが...
絶対 "確かな" 場所同士で Web から実行してみてもダメでしょうか?
|
すいません。「絶対確かな場所」とは、どういう意味なのでしょうか?
ドライブ直下とか分かりやすい場所にフォルダを作成し、そこに権限設定をして確認する、という意味でしょうか?
引用: |
|
それと、パス区切り文字が 2 箇所連続しているところがあるのが気になります。
VB では全然問題ないのですが、API 側では予期していないことがあります。
|
パス区切り文字(実際は、¥マークです)は、1文字で指定しています。
@IT に投稿する際に、¥マークは勝手に2文字になってしまうので・・・
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-04-10 12:13
引用: |
|
ひろれいさんの書き込み (2006-04-10 11:59) より:
ドライブ直下とか分かりやすい場所にフォルダを作成し、そこに権限設定をして確認する、という意味でしょうか?
|
そういうことです。
引用: |
|
パス区切り文字(実際は、¥マークです)は、1文字で指定しています。
@IT に投稿する際に、¥マークは勝手に2文字になってしまうので・・・
|
ええ、それは知っています。
前回の投稿ではなく、最初の投稿にあった、
引用: |
|
コード: |
|
ls_Command = "a -gw4 -xr1 -gm1 D:\ASPNET\test\page\zip\\Archive D:\ASPNET\test\page\excel\ *.xls"
li_Return = Unlha(0, ls_Command, Nothing, 0)
Return li_Return
|
|
ここについてご指摘したつもりでした。
この投稿に関しては "他" は正しく 1 Char でしたから気になったのです。
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- ひろれい
- ぬし
- 会議室デビュー日: 2006/03/02
- 投稿数: 486
- お住まい・勤務地: 万博開催地
|
投稿日時: 2006-04-10 13:01
引用: |
|
じゃんぬねっとさんの書き込み (2006-04-10 12:13) より:
そういうことです。
|
以下のように試してみましたが、やはりダメでした。
1.D:\\test_in フォルダを作成
2.上記フォルダに、圧縮したい Excelファイルを5個コピー
3.D:\\test_out フォルダを作成
4.「1.」と「3.」のフォルダに対し、ASPNET ユーザと IUSR_マシン名 ユーザにフルコントロール権限を付与
5.実行
コード: |
|
Public Class UnLha32
<System.Runtime.InteropServices.DllImport("UNLHA32.DLL", CallingConvention:=Runtime.InteropServices.CallingConvention.StdCall)> _
Private Shared Function Unlha(ByVal li_hWnd As Integer, _
<System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPTStr)> ByVal ls_CmdLine As String, _
<System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPTStr)> ByVal ls_OutPut As String, _
ByVal li_Size As Integer) As Integer
End Function
Public Overloads Shared Function Start(ByVal ls_LZHFile As String, ByVal ls_LZHDir As String, _
ByVal ls_OutDir As String) As Integer
Dim ls_Command As String
Dim li_Return As Integer
Dim inFile As String = "D:\\test_in\\Archive"
Dim outFile As String = "D:\\test_out\\"
Try
ls_Command = "a " & Chr(34) & inFile & Chr(34) & " " & Chr(34) & outFile & Chr(34) & " " & "*.*"
li_Return = Unlha(0, ls_Command, Nothing, 0)
Return li_Return
Finally
End Try
End Function
End Class
Dim test As Integer = UnLha32.Start(Server.MapPath("zip/"), Server.MapPath("zip/"), Server.MapPath("zip/"))
|
引用: |
|
ええ、それは知っています。
前回の投稿ではなく、最初の投稿にあった、
引用: |
|
コード: |
|
ls_Command = "a -gw4 -xr1 -gm1 D:ASPNETtestpagezip\\Archive D:ASPNETtestpageexcel *.xls"
li_Return = Unlha(0, ls_Command, Nothing, 0)
Return li_Return
|
|
ここについてご指摘したつもりでした。
この投稿に関しては "他" は正しく 1 Char でしたから気になったのです。
|
すいません。そこは、私の修正忘れです。
いったんプレビューして確認後に送信していますが、プレビュー時にも¥がダブるので、手動でハズしています(^_^;)
|
- ぽぴ王子
- ぬし
- 会議室デビュー日: 2006/03/24
- 投稿数: 475
- お住まい・勤務地: お住まい:城・勤務地:城
|
投稿日時: 2006-04-10 13:21
こんにちは。ぽぴ王子といいます。
すこし気になったのですが、Unlha.dllに渡すコマンドラインに間違いはないでしょうか。
ls_Commandの文字列を解釈すると
a "inFile" "outFile" *.*
になると思うのですが(便宜上inFileとoutFileはそのまま使っています)、これですと
a "D:\\test_in\\Archive" "D:\\test_out\\" *.*
のようなコマンドラインになり、Unlha.dllとしても解釈に困るような気がします。
意図したとおりに渡すには、以下のような感じではないかと。
a "inFile" "outFile*.*"
展開すると
a "D:\\test_in\\Archive" "D:\\test_out\\*.*"
このような感じで。
で、それをコードに直すと
ls_Command = "a " & Chr(34) & inFile & Chr(34) & " " & Chr(34) & outFile & "*.*" & Chr(34)
という感じになると思います。
一度試してみてください。
|