[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/11/29(Wed) 16:42
投稿者名:yu
Eメール:
URL :
タイトル:
制限ユーザーでファイル作成
いつも、参考にさせてもらっています。
分からないことがあったので投稿します。
VB6で自作したソフトを、別のPCでWindows XPの管理者権限でそのソフトを動かすと
問題ないのですが(Visual studio installerでインストール)、
制限ユーザーでログインして、自作ソフトを動かすと
ファイル作成でエラーになってしまいます。
    Open FileName For Random As FileNo Len = Len(WindSet)
        Put #FileNo, 1, WindSet
    Close #FileNo
詳細は、このような文でputのところで
「ランタイムエラー 75 ファイル名が無効です。」
となってしまいます。アドミでは問題ありません。
インストーラーが悪いのでしょうか、それともソフトが悪いのでしょうか?
よろしくお願いします。

投稿時間:2006/11/29(Wed) 19:08
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: 制限ユーザーでファイル作成
FileName で指定されるファイル名が、具体的にはどのような文字列になっているのか、
そして、それは相対パスで指定しているのか、フルパスで指定しているか、および、実行時に
そのパスに対する書き込み可能権限を有しているかをチェックしてみてください。

投稿時間:2006/11/29(Wed) 21:35
投稿者名:yu
Eメール:
URL :
タイトル:
Re^2: 制限ユーザーでファイル作成
回答ありがとうございます。
Filenameはフルパスで書いています。
具体的には
C:\Program Files\aaa\WindBak1.sys
です。フォルダは存在しています。
実行時に書き込み可能かどうは、どこをチェックすればよいのか分かりません。

また、CommonDialogを使って、保存先を任意に指定名しても、同様のエラーになります。
ファイル名はフルパスです。
(制限ユーザーのデスクトップに保存しようとしたがダメでした。)

Windows に付属のメモ帳で適当に文章を作り、デスクトップに保存することは可能でした。

> FileName で指定されるファイル名が、具体的にはどのような文字列になっているのか、
> そして、それは相対パスで指定しているのか、フルパスで指定しているか、および、実行時に
> そのパスに対する書き込み可能権限を有しているかをチェックしてみてください。

投稿時間:2006/11/29(Wed) 22:20
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^3: 制限ユーザーでファイル作成
> C:\Program Files\aaa\WindBak1.sys
であれば、制限ユーザでは無理でしょう。

制限ユーザ(Users グループ)のアカウントの場合、初期状態では、
Program Files 以下のフォルダに対する書き込みや変更は、許可されていません。
(内容の読み取りやファイルの実行は可能です)

制限ユーザでファイルの書き込みを行いたいのであれば、基本的には
 C:\Documents and Settings\(ユーザー名)\
配下のフォルダにしか行えない、と考えておいた方が良いかと。


> 実行時に書き込み可能かどうは、どこをチェックすればよいのか分かりません。
エクスプローラで、アクセスしたいフォルダあるいはファイルを右クリックして、
プロパティから「セキュリティ」のタブの内容をチェックしてみてください。

投稿時間:2006/11/30(Thu) 08:59
投稿者名:yu
Eメール:
URL :
タイトル:
Re^4: 制限ユーザーでファイル作成
> 制限ユーザでファイルの書き込みを行いたいのであれば、基本的には
>  C:\Documents and Settings\(ユーザー名)\
> 配下のフォルダにしか行えない、と考えておいた方が良いかと。
>
ありがとうございました。たしかに、制限ユーザーの下にフォルダを作って
そこに入れたら、動作しました。
複数の制限ユーザーがあった場合は、インストールしたフォルダ上にあるユーザー
しか使えないのですね。(他の制限ユーザーで動作しようとしたら、起動時にインストーラー
(VSI)が起動してエラー1706になり、ソフトが起動できませんでした。)

投稿時間:2006/11/30(Thu) 13:48
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^5: 制限ユーザーでファイル作成
MSI 自体は、per-machine インストールにしているのでしょうか?
それとも、per-user インストールなのでしょうか?

投稿時間:2006/11/30(Thu) 16:34
投稿者名:yu
Eメール:
URL :
タイトル:
Re^6: 制限ユーザーでファイル作成
orcaを使って
Propertyに
ALLUSERS 2
FolderForm_AllUsers ALL  
を追加しています。

> MSI 自体は、per-machine インストールにしているのでしょうか?
> それとも、per-user インストールなのでしょうか?

投稿時間:2006/11/30(Thu) 17:32
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^7: 制限ユーザーでファイル作成
> ALLUSERS 2

ふぅむ。で、インストール自体は管理者権限で行っていて、そのインストール先が、
 C:\Program Files\aaa\
だったわけですね。

そしてその状態で、起動時に Windows Installer が
>> エラー1706になり、ソフトが起動できませんでした。
を出力するということですか……。VB の実行時エラーではないようなので、
(ファイル作成などの)コードの問題とは、また別の話かも知れませんね。


こちらの方で、1706 エラーに関連しそうな情報を探してみましたが、
このあたりしか見つかりませんでした。
http://support.microsoft.com/kb/297834
http://support.microsoft.com/kb/258847
http://support.microsoft.com/kb/268800


こちらで再現できていないので、当てずっぽうですが、その msi ファイルを
全ユーザがアクセス可能なフォルダに配置しておき、そこからインストールを
行ってみてはどうでしょう?

投稿時間:2006/11/30(Thu) 19:08
投稿者名:yu
Eメール:
URL :
タイトル:
Re^8: 制限ユーザーでファイル作成
ALLUSERS 2
でC:\Program Files\aaa\
にインストールしたときは問題なく起動しましたが
put でファイルを作成しようとすると、「パス名が無効です」とVBの実行時エラーがでます。
それから、インストール先を制限ユーザーの
C:\Documents and Settings\(ユーザー名)\
にすると、その制限ユーザーは正常に起動とファイル作成もできます。
別の制限ユーザーが、起動すると起動時に1706のエラーになってしまいます。
ためしに、office2003をC:\Program Files\aaa\にインストールして、
制限ユーザーでwordを起動してファイル保存しても正常です。
wordを制限ユーザーで起動すると、最初にMSIが起動して何かしています。
そのあとwordが起動します。やはり、MSIに何か設定があるのでしょうか?
officeの***.msi のファイルをorcaで開いたのですが、propertyの項目にたくさん設定してあります。

投稿時間:2006/11/30(Thu) 22:10
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^9: 制限ユーザーでファイル作成
> put でファイルを作成しようとすると、「パス名が無効です」とVBの実行時エラーがでます。

もしかして、App.Path に対して、ファイル作成処理を行ったりはしていませんか?

制限ユーザでの運用を考慮するのであれば、先述したように、
    With CreateObject("WScript.Shell")
        Debug.Print .SpecialFolders("Desktop")
        Debug.Print .SpecialFolders("MyDocuments")
        Debug.Print .SpecialFolders("AppData")
    End With
などの、個人用フォルダにファイルを生成するのが一般的とされています。

もし、他のログオンユーザからも共有して読み書き可能にしたいのであれば、
Users グループアカウントに対するアクセス許可権限を与えたフォルダを
用意しておき、そのフォルダを利用するようにしてみては如何でしょう。


> それから、インストール先を制限ユーザーの
> C:\Documents and Settings\(ユーザー名)\
> にすると、その制限ユーザーは正常に起動とファイル作成もできます。

「個人別フォルダにアプリを配置」して、それを他のユーザにも使わせるという運用方法は、
かなり問題があるかと思います。個人別フォルダにアクセスできるユーザアカウントは、
(管理者などを除けば)そのユーザだけに限られますので、他のユーザが使用しようとすれば、
ファイルシステム(NTFS)の権限設定などによって、アクセスが拒否されてしまうはずです。


もしも個人別フォルダにインストールさせる運用にするのであれば、それは
ログインしたユーザが、それぞれ、自分の個人別フォルダに対するセットアップ作業を
行う必要があるでしょう。当然、インストーラ自体も per-user モードが適切です。

一方、現在の per-machine の MSI としている場合には、ユーザごとのセットアップ作業を
行わなくて済みますが、その場合は、誰もが読めるフォルダ、たとえば、Program Files や
All Users フォルダ配下に配置しないと、他のユーザがアプリを使えなくなってしまいます。
この場合、App.Path への書込は行えないので、ファイル出力処理を見直す必要があるでしょう。


> wordを制限ユーザーで起動すると、最初にMSIが起動して何かしています。
MSI というか、Windows Installer ですよね。

Office 製品をフルインストールしていなかった場合の、「アドバタイズ インストール」が
原因だったり、もしくは、Office のユーザ別初期設定が行われていなかった場合
(イニシャルの入力を行っていないとか、"ようこそ"画面が未読だったりとか)に、
そのような現象が発生する事があるようです。

とはいえ、Word 起動時の問題と、制限ユーザでのファイル作成が失敗する件とは、
それぞれ別の問題として、切り離して考えておいた方が良いかと思います。

投稿時間:2006/12/01(Fri) 10:19
投稿者名:yu
Eメール:
URL :
タイトル:
Re^10: 制限ユーザーでファイル作成
何度も回答ありがとうございます。
あれからいろいろやってみて、分かったことがありました。
ALLUSERS 2 にして
C:\Documents and Settings\All Users\Documents
にインストールすると、問題なく起動できます。
また、アドミでソフトを起動して、ファイル作成することは可能ですが
制限ユーザーでアドミが作成したファイル(同じファイル)をopenして
putでファイル作成しようとするとエラーになってしまいます。
アドミでファイル作成していなければ、制限ユーザーでも問題なくputできます。
エクスプローラでも試しましたが、アドミで作成したファイルを、
制限ユーザーが削除や追記しようとしてたら、「書き込みできません」となりました。

投稿時間:2006/12/01(Fri) 13:49
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^10: 制限ユーザーでファイル作成
> ALLUSERS 2 にして
> C:\Documents and Settings\All Users\Documents
> にインストールすると、問題なく起動できます。
やはりそうですか。先の回答の
>> 一方、現在の per-machine の MSI としている場合には
>>(中略)
>>All Users フォルダ配下に配置しないと、他のユーザがアプリを使えなくなってしまいます。
という部分の件ですね。

All Users フォルダに対しては、制限ユーザに対する実行と読み取りが許可されて
いるはずなので、実行可能なのだと思います。(書き込みはできないかも知れませんが)
http://support.microsoft.com/kb/304040/ja


> また、アドミでソフトを起動して、ファイル作成することは可能ですが
そうですね。管理者(Administrators グループ)相当のユーザは、ほぼすべての
フォルダに対するフルアクセス権限を持っていますので、管理者であるならば、
どのフォルダに対してもファイル作成が可能かと思います。


> 制限ユーザーでアドミが作成したファイル(同じファイル)をopenして
> putでファイル作成しようとするとエラーになってしまいます。
恐らくは、制限ユーザ(Users グループ)に対するアクセス許可が、
 「読み込み可能だが、書き込みは許可されていない」
という状態になってしまっているのだと思われます。
確認のため、作成したファイルに対するアクセス許可権限を調べてみてください。


> アドミでファイル作成していなければ、制限ユーザーでも問題なくputできます。
その制限ユーザで作成したファイルが、他の制限ユーザが使用可能かどうかも
確認しておいた方が良いでしょう。

すべての制限ユーザ(Users グループ)に対する書き込みアクセス権が与えてあるのならば
良いですが、特定の制限ユーザに対するアクセス権しか無いのだとすれば、
複数アカウントでの運用時に、また同じ問題にぶつかってしまうかも知れませんので。

投稿時間:2006/12/01(Fri) 15:00
投稿者名:yu
Eメール:
URL :
タイトル:
Re^11: 制限ユーザーでファイル作成
ありがとうございました。
解決できました。

アドミでC:\Program Files\aa
にインストールした後、aaフォルダの共有で
「ネットワーク上でこのフォルダを共有する」
「ネットワーク ユーザーによるファイルの変更を許可する」
この2つをチェックONにすると、制限ユーザーでもファイル作成することが
できました。
大変勉強になりました。

投稿時間:2006/12/01(Fri) 17:38
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^12: 制限ユーザーでファイル作成
それもどうかと……。

他のユーザが書き込める場所を作る、という方向性は良いのですが、
C:\Program Files\aa を公開するような設定は、かなり問題があるかと思いますよ。

制限ユーザであることを意識した運用にするのであれば、
 1) C:\Program Files\aa 上のファイルを読み込むのは OK。
 2) C:\Program Files\aa 上にファイルを作成するのは NG。
という前提は守るべきでしょうし。

まずは、「exe の配置フォルダに対して、制限ユーザがファイルを作成あるいは更新する」という
今の仕様を見直すべきでは無いでしょうか。


> アドミでC:\Program Files\aa
> にインストールした後、aaフォルダの共有で
> 「ネットワーク上でこのフォルダを共有する」
> 「ネットワーク ユーザーによるファイルの変更を許可する」

その設定ですと、たとえば、exe ファイル自体を差し替えることも許可することになって
しまいますので、セキュリティ面などからみても、出来る限り避けるべきでしょう。
(制限ユーザが変更したいのは、WindBak1.sys であって、exe ファイルでは無い筈です)

それに、そのフォルダをネットワーク共有にする必要性もないですよね。
必要なのは、ローカルユーザに対するアクセス権だけなのですから。

投稿時間:2006/12/01(Fri) 20:26
投稿者名:yu
Eメール:
URL :
タイトル:
Re^13: 制限ユーザーでファイル作成
「ネットワーク上でこのフォルダを共有する」
にしないと、
「ネットワーク ユーザーによるファイルの変更を許可する」
が  オンにできません。

共有だけオンにして、「ファイルの変更を許可する」をOFFにすると
やはり制限ユーザーではエラーになってしまいます。

投稿時間:2006/12/02(Sat) 07:00
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^14: 制限ユーザーでファイル作成
あらら。その様子だと、今までの回答の幾つか、たとえば No.7796 にて回答した
> エクスプローラで、アクセスしたいフォルダあるいはファイルを右クリックして、
> プロパティから「セキュリティ」のタブの内容をチェックしてみてください。
という点なども、実際には、まだ確認できていなかったのではありませんか?


恐らく今は、先に紹介したURLにも書かれていた「簡易ファイルの共有」機能が
有効な状態になっているのだと思います。それを一時的に Off にしてみてください。

Off にすると、フォルダのプロパティに「セキュリティ」タブが現れて、
細かい設定を行えるようになりますよ。



> やはり制限ユーザーではエラーになってしまいます。

だからといって、exe 等の置いてあるフォルダをネットワーク共有するのは、
セキュリティ上の問題がありますよね。exe ファイルなどが配置されていない、
書込が必要なファイル(WindBak1.sys)「だけ」が存在するフォルダを用意し、
それを制限ユーザーが書き込めるようにしておけば良いかと。

投稿時間:2006/12/02(Sat) 09:06
投稿者名:yu
Eメール:
URL :
タイトル:
Re^15: 制限ユーザーでファイル作成
> 恐らく今は、先に紹介したURLにも書かれていた「簡易ファイルの共有」機能が
> 有効な状態になっているのだと思います。それを一時的に Off にしてみてください。
>
開発環境はXPのproでしたが、インストールしたPCのOSがhomeのため、
「簡易ファイルの共有」が表示されず、確認を怠っていました。
申し訳ありません。なんとか確認してみます。
ありがとうございました。