tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルプログラムを入れ替えようとすると「パス名が無効です」
記事No16503
投稿日: 2019/09/11(Wed) 17:25
投稿者ももちゃん
お客様へアップデートのプログラムとコピー用プログラムをCDに入れてを送り、書き換えようとすると「パス名が無効です」と出てで書換えできません。

WindowsXPでは問題ありませんでした。

現在のOSは Windows10 64bit です。

コピー用プログラム(VB6で作成)の内容は下記の通りです。

   FileCopy "Test.exe", "C:\Program Files (x86)\Test\Test.exe"

自分で作成したフォルダーC:\Testへはうまき行きます

   FileCopy "Test.exe", "C:\Test\Test.exe"

ちなみにC:\Usersフォルダーへコピーしようとしても同じエラーがでます。

何が原因なのでしょうか? ご教授下さい。

[ツリー表示へ]
タイトルRe: プログラムを入れ替えようとすると「パス名が無効です」
記事No16504
投稿日: 2019/09/11(Wed) 23:21
投稿者魔界の仮面弁士
もしかして、コピー用プログラムを右クリックして「管理者として実行」を
選択した場合には、FileCopy が成功するのではないでしょうか?


C:\Program Files (x86)\ や C:\Users\ は、
一般ユーザーにとっては読み取り専用のフォルダーです。

インストーラーや SYSTEM アカウント、管理者権限であれば
書き込みできますが、そのままの権限では編集できませんので、
それが原因であろうかと予想しています。

特に Vista 以降では、UAC が働きますので、たとえ Administrator として
ログオンしていたとしても、権限昇格しないうちは一般ユーザー扱いになり、
このあたりの制御がより厳密になりました。

VB6 アプリにおける XP 以下と Vista 以降の差異については、このあたりをご覧ください。
https://www.atmarkit.co.jp/fdotnet/vblab/vb6onvista_02/vb6onvista_02_01.html



現在のユーザーが編集可能な場所、たとえば「自分で作成したフォルダーC:\Test」を
使うとか、現行ユーザーの AppData フォルダーの下にインストールすることを検討してみてください。
http://rms-099.hatenablog.jp/entry/20130120/1359218895


C:\Program Files (x86)\ 配下というパスは変更できず、かつ、そのフォルダーに
現在のユーザーへの書き込み権限を付与しておくこともできない場合には、
ShellExecuteEx API で『RunAs』を指定して exe を起動することで、
一時的に権限昇格させるという手法もあります。
http://dechnostick.hatenablog.com/entry/20120307/1331140472

また上記 RunAs のように、管理者権限が必要な処理を行うボタンやリンクを設ける場合には、
その場所に盾アイコン(シールドアイコン)を付与するのが Vista 以降での慣わしです。

[ツリー表示へ]
タイトル解決しました
記事No16505
投稿日: 2019/09/12(Thu) 12:22
投稿者ももちゃん
> もしかして、コピー用プログラムを右クリックして「管理者として実行」を
> 選択した場合には、FileCopy が成功するのではないでしょうか

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

単純な事だったのですね「管理者として実行」したらすんなり書換えが出来ました。

リンク先も読んで勉強させてもらいます。

[ツリー表示へ]