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

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

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

CドライブのWindowsフォルダにコピー

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

■84663 / inTopicNo.1)  CドライブのWindowsフォルダにコピー
  
□投稿者/ さや (1回)-(2017/07/26(Wed) 12:00:13)

分類:[.NET 全般] 

VB.Net のプログラムで外字ファイルを上書きコピーしたいのですが、外字ファイルのEUDC.TTE と EUDC.euf をCドライブのwindows フォルダへ上書きコピーしたいのですが、

通常のコピーのやり方だと、アクセス拒否されてしまいます。

どうすればコピーできるのでしょうか?
引用返信 編集キー/
■84665 / inTopicNo.2)  Re[1]: CドライブのWindowsフォルダにコピー
□投稿者/ Azulean (839回)-(2017/07/26(Wed) 12:38:59)
最近の Windows は通常使用時に管理者権限がない状態でプログラムを実行します。
Windows フォルダーの変更には管理者権限が必要なので、あなたのプログラムを管理者として実行してもらう他に方法はありません。
引用返信 編集キー/
■84667 / inTopicNo.3)  Re[2]: CドライブのWindowsフォルダにコピー
□投稿者/ PANG2 (184回)-(2017/07/26(Wed) 14:58:03)
UACが有効の時、アプリケーションを管理者に昇格させて起動する
http://dobon.net/vb/dotnet/system/asadmin.html
引用返信 編集キー/
■84669 / inTopicNo.4)  Re[3]: CドライブのWindowsフォルダにコピー
□投稿者/ さや (2回)-(2017/07/26(Wed) 17:28:43)
No84667 (PANG2 さん) に返信
> UACが有効の時、アプリケーションを管理者に昇格させて起動する
> http://dobon.net/vb/dotnet/system/asadmin.html

ありがとうございます。

試しに管理者として実行されるプログラムを作成したみましたが、

System.IO.File.Copy("D:\AAA\EUDC.TTE", "C:\Windows\Fonts\EUDC.TTE", True)

を実行したときに、やはり'C:\Windows\Fonts\EUDC.TTE' へのアクセスが拒否されました。 となってしまいます。


引用返信 編集キー/
■84671 / inTopicNo.5)  Re[4]: CドライブのWindowsフォルダにコピー
□投稿者/ 774RR (545回)-(2017/07/26(Wed) 19:36:17)
外字使ったことないから知らないけど C:\Windows\Fonts\EUDC.TTE が開かれたままになっているとか?
そうすると簡単に上書きできないけどどうしたもんかな・・・

> System.IO.File.Copy("D:\AAA\EUDC.TTE", "C:\Windows\Fonts\EUDC.TTE", True)
本当にこう書いたのなら失敗して当然だけど @"..." または "\\" のあたりは大丈夫?

引用返信 編集キー/
■84672 / inTopicNo.6)  Re[5]: CドライブのWindowsフォルダにコピー
□投稿者/ 魔界の仮面弁士 (1360回)-(2017/07/26(Wed) 19:56:21)
No84671 (774RR さん) に返信
>>System.IO.File.Copy("D:\AAA\EUDC.TTE", "C:\Windows\Fonts\EUDC.TTE", True)
> 本当にこう書いたのなら失敗して当然だけど @"..." または "\\" のあたりは大丈夫?
元質問は VB.NET ですよ。C# ではなく。


No84669 (さや さん) に返信
> System.IO.File.Copy("D:\AAA\EUDC.TTE", "C:\Windows\Fonts\EUDC.TTE", True)
> を実行したときに、やはり'C:\Windows\Fonts\EUDC.TTE' へのアクセスが拒否されました。 となってしまいます。

ReadOnly 属性や System 属性が付与されていたりはしませんか?

MsgBox(System.IO.File.GetAttributes("C:\Windows\Fonts\EUDC.TTE").ToString())
引用返信 編集キー/
■84676 / inTopicNo.7)  Re[6]: CドライブのWindowsフォルダにコピー
□投稿者/ さや (3回)-(2017/07/27(Thu) 07:59:06)
No84672 (魔界の仮面弁士 さん) に返信

> MsgBox(System.IO.File.GetAttributes("C:\Windows\Fonts\EUDC.TTE").ToString())

を実行したところ、Archive と返ってきました。
引用返信 編集キー/
■84677 / inTopicNo.8)  Re[7]: CドライブのWindowsフォルダにコピー
□投稿者/ さや (4回)-(2017/07/27(Thu) 08:19:49)
追記ですが、私の構文

System.IO.File.Copy("D:\AAA\EUDC.TTE", "C:\Windows\Fonts\EUDC.TTE", True)
に対しては、

要求された操作はユーザー マップ セクションで開いたファイルでは実行できません。というエラーが出てしまいます。

既にファイルが開かれているということでしょうか?
引用返信 編集キー/
■84678 / inTopicNo.9)  Re[8]: CドライブのWindowsフォルダにコピー
□投稿者/ ぽぴ王子 (49回)-(2017/07/27(Thu) 09:09:24)
ぽぴ王子 さんの Web サイト
No84677 (さや さん) に返信
> 追記ですが、私の構文
>
> System.IO.File.Copy("D:\AAA\EUDC.TTE", "C:\Windows\Fonts\EUDC.TTE", True)
> に対しては、
>
> 要求された操作はユーザー マップ セクションで開いたファイルでは実行できません。というエラーが出てしまいます。
>
> 既にファイルが開かれているということでしょうか?

まず聞いてみるのも大事だと思いますが、聞くためのヒントというか、回答してもらうために
自分で調べられそうなところは調べてみてからでも遅くないかもしれませんね。
とりあえずエラーメッセージで Web 検索をかけてみるのが手っ取り早いと思います。

というわけで「要求された操作はユーザー マップ セクションで開いたファイルでは実行できません。」で
検索してみたところ、先人が調べてくださった結果が見つかりました。

https://answers.microsoft.com/ja-jp/windows/forum/windows_7-update/windows7%E3%81%A7%E3%83%90%E3%83%83%E3%82%AF/05592c97-d81c-4b63-90e3-f7c7a4564d9e

この質問の回答によれば

> エラーのメッセージからWebを検索したところ、何らかのプロセス(プログラムとかアプリケーション)が一部のファイルをロックしている可能性があります。

とありますので、774RRさんが書かれたように、外字ファイルが(たぶんシステムで)開かれた
ままになっているのだと思います。
…となると、更新するのはちょっと大変かもしれませんね。(開いているアプリケーションに
ファイルを開放してもらわないといけない)
引用返信 編集キー/
■84679 / inTopicNo.10)  Re[9]: CドライブのWindowsフォルダにコピー
□投稿者/ 774RR (547回)-(2017/07/27(Thu) 09:24:15)
「外字ファイル」なるものを1アプリケーションプログラムの都合で勝手に更新してよいかどうかを再検討。
(他のプログラムの挙動まで影響を及ぼすわけで)

もし「ウチの社内ではこの外字ファイルを全員で共通に使う」とか決め事しているのであれば GPO で更新。
グループポリシー使ってよいのであればマシンの起動時に自動更新とかできそうなので問題なくなるはず。
Active Directory 導入してないとか Windows ** Home がいるとかだったら要再考察かも。

引用返信 編集キー/
■84685 / inTopicNo.11)  Re[10]: CドライブのWindowsフォルダにコピー
□投稿者/ さや (6回)-(2017/07/27(Thu) 14:11:51)
No84679 (774RR さん) に返信
> 「外字ファイル」なるものを1アプリケーションプログラムの都合で勝手に更新してよいかどうかを再検討。
> (他のプログラムの挙動まで影響を及ぼすわけで)
>
> もし「ウチの社内ではこの外字ファイルを全員で共通に使う」とか決め事しているのであれば GPO で更新。
> グループポリシー使ってよいのであればマシンの起動時に自動更新とかできそうなので問題なくなるはず。
> Active Directory 導入してないとか Windows ** Home がいるとかだったら要再考察かも。
>
客先によって外字ファイルが異なるため、そのたびに客先から外字ファイルを提供していただき、外字を切り替える必要がありまして、今まではフリーのソフトで対応していたのですが
何とか自作できないものかと、考えているところです。
もちろん自力でネット検索して、今も色々試していますが、まだ解決できていない状況なんです。
引用返信 編集キー/
■84686 / inTopicNo.12)  Re[11]: CドライブのWindowsフォルダにコピー
□投稿者/ PANG2 (185回)-(2017/07/27(Thu) 14:38:52)
手動でコピー出来るのでしょうか?

元ファイルをリネームしてからコピーすればよい、という情報もあります。
http://www.helpforest.com/office/win_config/win010019.htm
引用返信 編集キー/
■84753 / inTopicNo.13)  Re[12]: CドライブのWindowsフォルダにコピー
□投稿者/ さや (10回)-(2017/08/01(Tue) 08:47:31)
No84686 (PANG2 さん) に返信

まずリネームしてからコピーし、そして最後に元ファイルを削除してみました。

System.IO.File.Move("C:\Windows\Fonts\EUDC.TTE", "C:\Windows\Fonts\EUDC_old.TTE")
System.IO.File.Copy("D:\AAA\EUDC.TTE", "C:\Windows\Fonts\EUDC.TTE", True)
System.IO.File.Delete("C:\Windows\Fonts\EUDC_old.TTE")

3行目までは進んだのですが、Delete の部分でアクセスが拒否されてしまい、エラーとなってしまいました。

管理者権限で実行しているのですが、何が原因なのでしょうか?
引用返信 編集キー/
■84756 / inTopicNo.14)  Re[13]: CドライブのWindowsフォルダにコピー
□投稿者/ 774RR (555回)-(2017/08/01(Tue) 10:12:19)
外字ファイルを開いたままにしているプロセスがいるかどうかを、たとえば
http://rtaki.sakura.ne.jp/infra/?p=1739
のような手法で調査してみるといいだろう。

っていうか、こんな記事もあったんだけど

http://office-qa.com/win/win104.htm
Fonts ディレクトリ自体に対する書き込み権限をつける必要があるかも。

https://support.microsoft.com/ja-jp/help/413278
今の Windows (7/8/10) に適合するかどうかは知らない。


引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ