質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

IIS

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

1744閲覧

vb6で作られたDLLを利用したVB.aspxのWEBアプリケーションのプロセスロックについて

help_

総合スコア20

DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

IIS

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2019/02/26 06:34

現在VB6で作成されたDLLを利用したasp.netのWEBアプリケーションを作成しています。
開発環境でWEB発行を行い、IIS上で稼働しています。
DLLを利用するページを呼んだ後に、該当DLLの変更などを行おうとした際に
「IIS Worker Process によっていファイルは開かれているため操作を完了できません」
というエラーメッセージが表示されてしまいます。
タスクマネージャーから該当のIIS Worker Processを終了することで変更を行うことが出来るようになりますが
解決策がわからず困っています。
どうかお力をお貸しいただけたら、と思います。

動作環境
WindowsServer2012R2
IIS8
開発環境
.netFramework4.6.2
VB.net
VisualStudio2013WEBExpress

下記のような形で呼び出しています。

VB.net

1'clsDLL 2 <DllImport("hoge.dll", _ 3 SetLastError:=True, CharSet:=CharSet.Ansi, _ 4 ExactSpelling:=True, _ 5 CallingConvention:=CallingConvention.StdCall)> _ 6 Public Shared Function hogeSetFilePath _ 7 ByVal hoge As String) _ 8 As Long 9 End Function 10 11'DLL呼び出し 12clsDLL.hogeSetFilePath("hoge") 13

なにか終了時にリリースするような処理が必要なのでしょうか。
どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

DLLを読み込むと、そのプロセスが終了するまで解放されません。
デバッグの場合は、VSがWorker Processを動作させているのでしょう。

DLLを解放させようとすると、動作しているAppDomainとは違うAppDomainにロードし、不要になったらそのAppDomainをUnloadすることになるかと思います。
こちらのページが参考になりませんか?

投稿2019/02/26 08:13

YAmaGNZ

総合スコア10222

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

help_

2019/02/26 08:32

回答ありがとうございます。 理屈としては提示していただいたページが大変参考になりました。 ただ現状DLL自体の変更を行うのは不可能であるものを利用するしかない状態です…。
YAmaGNZ

2019/02/26 08:50

私もこれ以上のことは分からないので、間違っているかもしれませんが インターフェイスを使わずに行う方法もあったかと思います。 もしくは対象DLLをラッピングしたDLLを作成するとかはどうでしょうか
help_

2019/02/28 08:26

DLLがロックされて他の処理が行えないわけではないうえ、今後VB6ではなく.netで作り直したものがリリースされる予定なのでそれまで処理は保留にすることとなりました。 DLL作成の際にいただいたURLが参考になりそうですのでベストアンサーとさせていただきます。 ありがとうございました。
guest

0

思いつきレベルなので確証などはありませんが・・・

現在VB6で作成されたDLLを利用したasp.netのWEBアプリケーションを作成しています。

VB ランタイムには 32-bit 版しかないそうですが(以下の記事の「[Step. 15] 64 ビットワーカプロセスの制限事項」の表参照)、それが関係しているということはないでしょうか。

Part 3. ASP.NET 2.0 Web アプリケーションの 64 ビット対応
https://blogs.msdn.microsoft.com/nakama/2008/11/13/part-3-asp-net-2-0-web-64/

つまり、

WindowsServer2012R2 ということですとデフォルトではワーカープロセスは 64-bit 動作していると思います。なので、上の記事に詳しい説明がありますが、32-bit の VB6 の dll が動かない。

一方、開発マシンでは VisualStudio2013WEBExpress から 32-bit 版の IIS Express で Web アプリを動かしているのでワーカープロセスは 32-bit 動作となり、32-bit の VB6 の dll は問題なく動く。

・・・ということではないでしょうか?

他に、開発マシンで動いて運用環境で動かないということでよくあるのが、ワーカープロセスのアクセス権の違いによるものです(運用環境の方が権限が低い)。これは今回の問題の原因とは違うような気がしますが・・・

投稿2019/02/26 07:04

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

help_

2019/02/26 07:29

回答ありがとうございます。 DLL自身は動いていて動作の確認も出来てはおります。 ですが「IIS Worker Process(32bit)」のタスクを終了しない限り変更等を行うことが出来ません…。
退会済みユーザー

退会済みユーザー

2019/02/26 07:44

エラーメッセージ「IIS Worker Process によっていファイルは開かれているため操作を完了できません」の通りの問題ということのようですが、とすると開発マシンでも同じ問題が再現できるのですか? であれば、切り分け・デバッグ実行などすれば原因が分かりそうな気がしますけど、どこまで調べたのでしょう?
help_

2019/02/26 07:46

VisualStudio上からの動作では再現しませんでした。 切り分けなどは行っていないので試してみたいと思います、
help_

2019/02/26 07:52

VisualStudio上でのデバッグ起動中にも同事象が発生しました。 ですがデバッグを終了すると問題なく変更が行えるようになります。 VisualStudio上でデバッグ終了を行っていることと同様の処理をaspx毎に行えれば解決できるのではないか、と考えました。
退会済みユーザー

退会済みユーザー

2019/02/26 09:17

開発マシンでは Visual Studio から IIS Express 上で Web アプリを動かしているのですか? 開発マシンで IIS は使えますか?(OS が Professional 版なら使えるはず) であれば、開発マシンでも IIS で Web アプリを動くように設定して検証することをお勧めします(前にもそういうアドバイスをしたような記憶が・・・)。それでかなりのところが分かりそうな気がします。
help_

2019/02/28 08:24

VisualStudio上からIIS Expressを起動してデバッグを行っております。 デバッグ実行中にDLLが同プロセスからロックされていることも確認できたので、サーバー上だけの問題ではないようです。
help_

2019/02/28 08:30

DLLがロックされて他の処理が行えないわけではないうえ、今後VB6ではなく.netで作り直したものがリリースされる予定なのでそれまで処理は保留にすることとなりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問