C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[10]: ネットワーク越しのショートカットEXEの起動について


(過去ログ 119 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■69576 / inTopicNo.1)  ネットワーク越しのショートカットEXEの起動について
  
□投稿者/ G (7回)-(2014/01/09(Thu) 17:13:39)

分類:[VB6 以前] 

2014/01/09(Thu) 17:37:11 編集(投稿者)
2014/01/09(Thu) 17:36:56 編集(投稿者)

動作環境@
client:winXP/Office2003
DB:Access(mdb Access95形式)

動作環境A
client:win7/Office2010
DB:Access(mdb Access95形式)

サーバ上にあるVB6で作成された EXEのショートカットを(ショートカット自体をclientにもってきてます)
client上で動作させたとき エラーが発生して困ってます。
エラー内容:エラーです。処理を中断します(ユーザメッセージ)

8年前のアプリケーションで、ソース自体も見つからない状態で、
つくり直しで話は進めていますが、エラーの原因を知りたく。
(ソース・情報も薄いので ぼんやりしたイメージが知りたく)

こちらで確認・調査したこと。
・office2010では 互換性モードにチェックをいれないと mdb形式のファイルを開けない。
・exe自体をclientに持ってきた場合(動作環境A)、処理は正常に行われる。


宜しくお願いします。

引用返信 編集キー/
■69580 / inTopicNo.2)  Re[1]: ネットワーク越しのショートカットEXEの起動について
□投稿者/ 魔界の仮面弁士 (495回)-(2014/01/09(Thu) 19:16:40)
No69576 (G さん) に返信
> サーバ上にあるVB6で作成された EXEのショートカットを(ショートカット自体をclientにもってきてます)
> client上で動作させたとき エラーが発生して困ってます。
> エラー内容:エラーです。処理を中断します(ユーザメッセージ)

たとえば、ini ファイルあるいは mdb を開く先の ldb の書き込みなどのために、
フォルダあるいはファイルへの書き込みアクセス権が要求されていて、
ネットワーク越しだと、権限不足で書き込みエラーになっているとか…。

その場合、基準フォルダを CurDir で得ているのか App.Path で得ているのかによって
対応は変わってきますが、もしもカレントからの相対パスでの指定だとすれば、
ショートカットのプロパティで「作業フォルダ」をローカルにしておくことで
回避できる かも しれません。


> DB:Access(mdb Access95形式)

何を用いて接続されているかはわかりますか?

  (1) Data コントロール
  (2) RemoteData コントロール(MSRDC) + Access ODBC Driver
  (3) ADO データ コントロール (ADODC) + Microsoft.Jet.OLEDB.3.51 Provider
  (4) ADO データ コントロール (ADODC) + Microsoft.Jet.OLEDB.4.0 Provider
  (5) RDO 2.0 + Access ODBC Driver
  (6) DAO 3.0
  (7) DAO 2.5/3.5x Compatibility Library
  (8) DAO 3.5x
  (9) ADODB + Microsoft.Jet.OLEDB.3.51 Provider
 (10) ADODB + Microsoft.Jet.OLEDB.4.0 Provider
 (11) OLE オートメーション
 (12) 上記以外
引用返信 編集キー/
■69587 / inTopicNo.3)  Re[2]: ネットワーク越しのショートカットEXEの起動について
□投稿者/ G (8回)-(2014/01/10(Fri) 09:27:01)
回答ありがとうございます。

No69580 (魔界の仮面弁士 さん) に返信
> ■No69576 (G さん) に返信
>>サーバ上にあるVB6で作成された EXEのショートカットを(ショートカット自体をclientにもってきてます)
>>client上で動作させたとき エラーが発生して困ってます。
>>エラー内容:エラーです。処理を中断します(ユーザメッセージ)
>
> たとえば、ini ファイルあるいは mdb を開く先の ldb の書き込みなどのために、
> フォルダあるいはファイルへの書き込みアクセス権が要求されていて、
> ネットワーク越しだと、権限不足で書き込みエラーになっているとか…。
ネットワーク管理者等に確認したところ 実行ユーザは、Adminの権限があるので問題ないそうです。

> その場合、基準フォルダを CurDir で得ているのか App.Path で得ているのかによって
> 対応は変わってきますが、もしもカレントからの相対パスでの指定だとすれば、
> ショートカットのプロパティで「作業フォルダ」をローカルにしておくことで
> 回避できる かも しれません。
>
>
>>DB:Access(mdb Access95形式)
>
> 何を用いて接続されているかはわかりますか?
>
>   (1) Data コントロール
>   (2) RemoteData コントロール(MSRDC) + Access ODBC Driver
>   (3) ADO データ コントロール (ADODC) + Microsoft.Jet.OLEDB.3.51 Provider
>   (4) ADO データ コントロール (ADODC) + Microsoft.Jet.OLEDB.4.0 Provider
>   (5) RDO 2.0 + Access ODBC Driver
>   (6) DAO 3.0
>   (7) DAO 2.5/3.5x Compatibility Library
>   (8) DAO 3.5x
>   (9) ADODB + Microsoft.Jet.OLEDB.3.51 Provider
>  (10) ADODB + Microsoft.Jet.OLEDB.4.0 Provider
>  (11) OLE オートメーション
>  (12) 上記以外
Microsoft DAO 3.5.1 Object Libraryです。
(上記も 当時作成した アプリ(今回のアプリとは別)のソースで確認を行い、
同一の規約でつくっていると想定しての回答です。

宜しくお願いします。


引用返信 編集キー/
■69588 / inTopicNo.4)  Re[3]: ネットワーク越しのショートカットEXEの起動について
□投稿者/ G (9回)-(2014/01/10(Fri) 11:16:59)
途中報告です。

> ・exe自体をclientに持ってきた場合(動作環境A)、処理は正常に行われる。
上記処理もエラーが発生しました。

また、Oracleへの接続もありました。

色々調査してみたのですが、、、、処理の流れとして

@Oracleへの接続/データ取得
Aサーバからmdbファイルをローカルにコピー(ここまでは正常に行われている ファイルができてるので)
Bmdbファイルをオープン(ここでエラーが発生しているはず)
Cmdbにデータをadd
D処理終了

Bのところで
Dim dblocal As DAO.Database
Set dblocal = Workspaces(0).OpenDatabase(ローカルパス指定)
dblocal.OpenRecordse("HOGE",1)
上記のようなコードを記述していると思います。
ここで 3011/3078エラーが発生していると思うのです。

winXPとwin7での環境の違いなんでしょうか・・・。
引用返信 編集キー/
■69594 / inTopicNo.5)  Re[4]: ネットワーク越しのショートカットEXEの起動について
□投稿者/ 魔界の仮面弁士 (496回)-(2014/01/10(Fri) 15:23:24)
No69588 (G さん) に返信
> ネットワーク管理者等に確認したところ 実行ユーザは、Adminの権限があるので問題ないそうです。
ネットワーク権限があることは分かりましたが、それはもしかして、
管理者権限が無いと動かないようなアプリになっている、ということなのでしょうか。

Vista 以降の OS では、UAC の働きにより、
 ・%SystemRoot%  … C:\
 ・%ProgramFiles% … C:\Program Files
 ・HKEY_LOCAL_MACHINE\Software
などへの書き込みが仮想化されており、実際とは異なる場所が操作されたりします。
こうした場所への書き込み(iniなど)があると、たとえ管理者ユーザーで
あったとしても影響があります。

EXE を右クリックして、管理者モードにて実行した場合に、
動作に差が生じるかも確認した方が良いかもしれません。


>> ・exe自体をclientに持ってきた場合(動作環境A)、処理は正常に行われる。
> 上記処理もエラーが発生しました。
環境1 では、ローカル実行できるけれども、ネットワーク上の EXE からは実行できない状態。
環境2 では、EXE がローカルでもネットワーク上でも、いずれも正常動作していない、ということですね?


> また、Oracleへの接続もありました。
何の話でしょうか? Access ではなく、突然 Oracle という言葉が出てきましたが…。

Oracle Database も併用しているとしたら、それはどうやって接続していますか?
DAO の ODBCDirect なのか、パススルークエリーなのか、あるいは ODBC リンクテーブルなのか、
それとも DAO とは無関係に、別途 oo4o や ADO や RDO などで接続しているのか。


環境 2が Win7x64 で、Oracle Client あるいは ODBC Dirver も 64bit 版しか入っていなかった場合、
64bit Access からは繋がりますが、VB6 や 32bit Access からは繋がらない、ということはありますね。



>> エラー内容:エラーです。処理を中断します(ユーザメッセージ)
このエラーが、不正データ検出などのための、意図的な論理エラーなのか、
あるいは VB ランタイムが発しているものなのか、DAO/JET が発しているものなのか、
Oracle 関連のエラーなのかはわかりますか?

発生元が分からないのであれば、まずはそれが、何のエラーなのかを特定する作業が必要でしょう。
いわゆる「Err.Source」「Err.Number」「Err.Description」の調査です。

VB6 なり VBScript なりで、mdb を開くようなコードを書いて、
それを実行してみた場合にも、何らかのエラーになりますか?

実験コードで動くのであれば、実際には、mdb は直接関係ないという可能性もあります。
(ini ファイルやレジストリの設定ミスなど)


> Dim dblocal As DAO.Database
> Set dblocal = Workspaces(0).OpenDatabase(ローカルパス指定)
DBEngine の初期化はせず、暗黙の Global object を操作するタイプのコードですね。
OpenDatabase の第2引数以降は未指定なのですね?


> dblocal.OpenRecordse("HOGE",1)
『OpenRecordse「t」』の間違いとは思いますが、
何故にマジックナンバー 1 が…。dbOpenTable を使いましょう。(^_^;


> ここで 3011/3078エラーが発生していると思うのです。
「3011/3078エラー」とは何のことですか? エラー番号まで分かっていたのでしょうか。
そういう重要な情報は最初に出してほしいです…。

手持ちの Access 2010 で、
 Debug.Print AccessError(3011)
 Debug.Print AccessError(3078)
を確認してみました。

3011 の方は、
・The Microsoft Jet database engine could not find the object <name>. Make sure the object exists and that you spell its name and the path name correctly.
・オブジェクト '<オブジェクト名>' が見つかりませんでした。オブジェクトが存在していること、名前やパス名が正しいことを確認してください。'<オブジェクト名>' がローカル オブジェクトでない場合は、ネットワークの接続を確認するか、サーバー管理者に問い合わせてください。

3078 の方は、
・The Microsoft Jet database engine cannot find the input table or query <name>. Make sure it exists and that its name is spelled correctly.
・入力テーブルまたはクエリ '<クエリ名>' が見つかりませんでした。そのテーブルやクエリが存在していること、または名前が正しいことを確認してください。
ですね。

誤って、別の mdb を開いているという可能性はありませんか?
引用返信 編集キー/
■69596 / inTopicNo.6)  Re[5]: ネットワーク越しのショートカットEXEの起動について
□投稿者/ G (10回)-(2014/01/10(Fri) 17:08:17)
2014/01/10(Fri) 17:09:32 編集(投稿者)

魔界の仮面弁士 さん 回答ありがとうございます。

No69594 (魔界の仮面弁士 さん) に返信
> ■No69588 (G さん) に返信
>>ネットワーク管理者等に確認したところ 実行ユーザは、Adminの権限があるので問題ないそうです。
> ネットワーク権限があることは分かりましたが、それはもしかして、
> 管理者権限が無いと動かないようなアプリになっている、ということなのでしょうか。
>
> Vista 以降の OS では、UAC の働きにより、
>  ・%SystemRoot%  … C:\
>  ・%ProgramFiles% … C:\Program Files
>  ・HKEY_LOCAL_MACHINE\Software
> などへの書き込みが仮想化されており、実際とは異なる場所が操作されたりします。
> こうした場所への書き込み(iniなど)があると、たとえ管理者ユーザーで
> あったとしても影響があります。
>
> EXE を右クリックして、管理者モードにて実行した場合に、
> 動作に差が生じるかも確認した方が良いかもしれません。
>
管理者モードで起動してもエラーが発生します。
>
> >> ・exe自体をclientに持ってきた場合(動作環境A)、処理は正常に行われる。
>>上記処理もエラーが発生しました。
> 環境1 では、ローカル実行できるけれども、ネットワーク上の EXE からは実行できない状態。
> 環境2 では、EXE がローカルでもネットワーク上でも、いずれも正常動作していない、ということですね?
>
はい。
>
>>また、Oracleへの接続もありました。
> 何の話でしょうか? Access ではなく、突然 Oracle という言葉が出てきましたが…。
>
最初の投稿時には見つからなかった ドキュメントがその後みつかり、
それベースで oracleへの接続が分かりました。

このアプリが動いてるPCには、odbcの設定が行われていたことを確認しています。

> Oracle Database も併用しているとしたら、それはどうやって接続していますか?
> DAO の ODBCDirect なのか、パススルークエリーなのか、あるいは ODBC リンクテーブルなのか、
> それとも DAO とは無関係に、別途 oo4o や ADO や RDO などで接続しているのか。
>
>
> 環境 2が Win7x64 で、Oracle Client あるいは ODBC Dirver も 64bit 版しか入っていなかった場合、
> 64bit Access からは繋がりますが、VB6 や 32bit Access からは繋がらない、ということはありますね。
>
>
win7 / odbc 32bitです。

>
> >> エラー内容:エラーです。処理を中断します(ユーザメッセージ)
> このエラーが、不正データ検出などのための、意図的な論理エラーなのか、
> あるいは VB ランタイムが発しているものなのか、DAO/JET が発しているものなのか、
> Oracle 関連のエラーなのかはわかりますか?
>
> 発生元が分からないのであれば、まずはそれが、何のエラーなのかを特定する作業が必要でしょう。
> いわゆる「Err.Source」「Err.Number」「Err.Description」の調査です。
>
> VB6 なり VBScript なりで、mdb を開くようなコードを書いて、
> それを実行してみた場合にも、何らかのエラーになりますか?
>
> 実験コードで動くのであれば、実際には、mdb は直接関係ないという可能性もあります。
> (ini ファイルやレジストリの設定ミスなど)
>
>
>>Dim dblocal As DAO.Database
>>Set dblocal = Workspaces(0).OpenDatabase(ローカルパス指定)
> DBEngine の初期化はせず、暗黙の Global object を操作するタイプのコードですね。
> OpenDatabase の第2引数以降は未指定なのですね?
>
>
>>dblocal.OpenRecordse("HOGE",1)
> 『OpenRecordse「t」』の間違いとは思いますが、
> 何故にマジックナンバー 1 が…。dbOpenTable を使いましょう。(^_^;
>
>
>>ここで 3011/3078エラーが発生していると思うのです。
> 「3011/3078エラー」とは何のことですか? エラー番号まで分かっていたのでしょうか。
> そういう重要な情報は最初に出してほしいです…。
>
> 手持ちの Access 2010 で、
>  Debug.Print AccessError(3011)
>  Debug.Print AccessError(3078)
> を確認してみました。
>
> 3011 の方は、
> ・The Microsoft Jet database engine could not find the object <name>. Make sure the object exists and that you spell its name and the path name correctly.
> ・オブジェクト '<オブジェクト名>' が見つかりませんでした。オブジェクトが存在していること、名前やパス名が正しいことを確認してください。'<オブジェクト名>' がローカル オブジェクトでない場合は、ネットワークの接続を確認するか、サーバー管理者に問い合わせてください。
>
> 3078 の方は、
> ・The Microsoft Jet database engine cannot find the input table or query <name>. Make sure it exists and that its name is spelled correctly.
> ・入力テーブルまたはクエリ '<クエリ名>' が見つかりませんでした。そのテーブルやクエリが存在していること、または名前が正しいことを確認してください。
> ですね。
>
> 誤って、別の mdb を開いているという可能性はありませんか?

以下の実験コードで 今回の3011エラーが出ることが判明しました。


Public rdoConnect As rdoConnection
Dim dblocal As DAO.Database

'sqlは select * from HOGE
set rdoResult = rdoConnect.OpenResultset(sql, rdOpenForwardOnly + rdOpenStatic, rdConcurReadOnly)

If Err.Number = 0 Then
Set dblocal = Workspaces(0).OpenDatabase("C:\\TEST.mdb") '第二引数は指定なし
Workspaces(0).BeginTrans
dblocal.OpenRecordset("HOGE", dbOpenTable)
if Err.Number > 0 then
'ここで 3011エラーが発生

WinXP上では エラーは 発生しなかったのですが、
win7上でエラーが発生します。

引き続き実験コードで 調査を行っています。
引用返信 編集キー/
■69597 / inTopicNo.7)  Re[6]: ネットワーク越しのショートカットEXEの起動について
□投稿者/ 魔界の仮面弁士 (497回)-(2014/01/10(Fri) 17:43:37)
No69596 (G さん) に返信
> Set dblocal = Workspaces(0).OpenDatabase("C:\\TEST.mdb") '第二引数は指定なし

まず、パス名が不自然です。ルートなら "C:\TEST.mdb" になるはずです。

次に、ルートフォルダーで処理を行わせるべきではありません。特に Vista 以降では。
アプリケーション運用のために、専用のフォルダーを用意するか、
ユーザー別フォルダ(Documents フォルダなど)を利用しましょう。

ルートの場合、UAC が動いていると、実際のファイルのアクセス先が
 C:\Users\ユーザー名\AppData\Local\VirtualStore\TEST.mdb
になってしまい、VB からは C:\TEST.mdb を見ているつもりでも、
実際には、VirtualStore のパスが参照される可能性があります。
引用返信 編集キー/
■69599 / inTopicNo.8)  Re[7]: ネットワーク越しのショートカットEXEの起動について
□投稿者/ G (11回)-(2014/01/10(Fri) 18:04:13)
魔界の仮面弁士 さん回答ありがとうございます。

> 次に、ルートフォルダーで処理を行わせるべきではありません。特に Vista 以降では。
> アプリケーション運用のために、専用のフォルダーを用意するか、
> ユーザー別フォルダ(Documents フォルダなど)を利用しましょう。
>
教えて頂いた情報をもとに、
C:\Test.mdb→C:\KK\USERS\Test.mdbに変更してみても エラーの内容が変わりません。

winXPでは Office2003 win7では office2010がインストールされており、
このあたりも エラーの原因になっているのか 引き続き調査してみます。


引用返信 編集キー/
■69600 / inTopicNo.9)  Re[8]: ネットワーク越しのショートカットEXEの起動について
□投稿者/ 魔界の仮面弁士 (498回)-(2014/01/10(Fri) 18:32:51)
2014/01/10(Fri) 18:39:36 編集(投稿者)

No69599 (G さん) に返信

社内事例を当たってみたところ、VB6製アプリの動作検証において、
Server 2008 (R2 かどうかは不明)で OpenRecordset がエラーに
なっていたが、互換モードを Windows XP (Service Pack 2) に
したところ、エラーが解消したという話があったようです。又聞きですが。


> winXPでは Office2003 win7では office2010がインストールされており、
> このあたりも エラーの原因になっているのか 引き続き調査してみます。

(質問 1) コンパイル機と、環境1 の OS / Office は同一ですか?

(質問 2) 参照設定に、Microsoft Access X.X Object Library が含まれていますか?
 (互換性問題を考えると、含まれていない方が望ましいです)

(質問 3) エラーとなる OpenRecordset(tableName, dbOpenTable) で指定した tableName は
 テーブルでしょうか。それとも選択クエリでしょうか。

(質問 4) エラー 3011 は、指定したオブジェクト(tableName)が見つからないという意味かと思います。
 ためしに、その環境で .Execute "CREATE TABLE tableName (COL1 INT PRIMARY KEY)" を実行した場合、
 オブジェクト名の競合エラーになりますか? それともそのまま生成されますか?
引用返信 編集キー/
■69601 / inTopicNo.10)  Re[9]: ネットワーク越しのショートカットEXEの起動について
□投稿者/ G (12回)-(2014/01/10(Fri) 19:31:00)
No69600 (魔界の仮面弁士 さん) に返信
> 2014/01/10(Fri) 18:39:36 編集(投稿者)
>
> ■No69599 (G さん) に返信
>
> 社内事例を当たってみたところ、VB6製アプリの動作検証において、
> Server 2008 (R2 かどうかは不明)で OpenRecordset がエラーに
> なっていたが、互換モードを Windows XP (Service Pack 2) に
> したところ、エラーが解消したという話があったようです。又聞きですが。
>
確認してみます。
>
>>winXPでは Office2003 win7では office2010がインストールされており、
>>このあたりも エラーの原因になっているのか 引き続き調査してみます。
>
> (質問 1) コンパイル機と、環境1 の OS / Office は同一ですか?
>
winXP/office2003 同一です。
> (質問 2) 参照設定に、Microsoft Access X.X Object Library が含まれていますか?
>  (互換性問題を考えると、含まれていない方が望ましいです)
>
含まれていないはずです。(ドキュメントベースを調査しての回答です)
> (質問 3) エラーとなる OpenRecordset(tableName, dbOpenTable) で指定した tableName は
>  テーブルでしょうか。それとも選択クエリでしょうか。
>
テーブル名です。
> (質問 4) エラー 3011 は、指定したオブジェクト(tableName)が見つからないという意味かと思います。
>  ためしに、その環境で .Execute "CREATE TABLE tableName (COL1 INT PRIMARY KEY)" を実行した場合、
>  オブジェクト名の競合エラーになりますか? それともそのまま生成されますか?

3010エラーが発生して、すでにテーブルが存在しているとのエラー情報です。

引き続き調査します。


引用返信 編集キー/
■69620 / inTopicNo.11)  Re[10]: ネットワーク越しのショートカットEXEの起動について
□投稿者/ G (13回)-(2014/01/14(Tue) 11:52:02)
報告。

APの動作が正常に動きました。

今回の対応策。

@DAO 3.5.1 → 3.6(参照設定)
AAP(exe)とは別に、MSACCESS.EXEの互換性モード(XP SP2)にチェックを入れた。
  http://support.microsoft.com/kb/942394/ja
上記を行ったことで無事に解決できました。

魔界の仮面弁士さん・他調査して頂いた方 ありがとうございました。

これで解決済みとさせてもらいます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -