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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

Q&A

解決済

2回答

6586閲覧

c# 管理者権限が必要なフォルダパスかの判定

kyosin

総合スコア15

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

0グッド

3クリップ

投稿2019/07/08 05:59

現在c# でフォルダパスを取得しようとしていますが、
例えば、C:\Users、C:\Program Files、C:\Program Files (x86)、C:\Windows などフォルダなど、管理者が必要?なフォルダがあります。

フォルダには読み取り専用など属性があり、その取得方法はネット上でも出てくるのですが、管理者権限を含んでいるかどうかは、どのように判定するのでしょうか?

上記の内容では、自分の認識が誤っている場合があるので、
下記の画像を2枚用意しています。
画像における青黄色の盾アイコンが含まれている、含まれていないの
判定方法をc# スクリプトで知りたいのです。


イメージ説明


イメージ説明

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

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

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

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

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

guest

回答2

0

ファイルのアクセス権限 ですかね。

「管理者権限が必要」ではありません。要求者に権限がない(これは確定)。管理者なら権限があるかもしれない、です。ほかのPCに付いていたディスクを繋ぎ換えて読む時など、昇格しても読めないことはあります。

投稿2019/07/08 08:12

Q71

総合スコア995

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

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

kyosin

2019/07/08 08:34

ファイルのアクセス権なのですね。 青黄アイコンのフォルダと、新規作成したフォルダを見比べると、 以下のようなユーザー権限になっていました。 ■青黄アイコンのフォルダ SYSTEM フルコントロール Administrators フルコントロール Users 読み取り ■新規作成したフォルダ Authenticated Users 変更+読み書き SYSTEM フルコントロール Administrator フルコントロール Users 読み取り 仮に私自身のユーザーアカウント名が WATASI だった場合、 現在選択されているフォルダに 青黄アイコンがあるフォルダかどうか調べるには、 ①教えていただいたアクセス権よりユーザー名が SYSTEM、Administrators、Usersしかない。 かつ ②フォルダのアクセス権にWATASIの権限が無い の条件から導けるということなのでしょうか?
Q71

2019/07/08 12:37

申し訳ありません。「ファイルの所有者」も調べてみてください。 コマンドプロンプトで、[ DIR /Q ] 「所有者でなかったらシールドアイコンをつける」かもしれません。(いや、所有者であっても「書き込み権なし」にはできるのだけれど) アクセス権としていますが、「読み取り」「書き込み」のためのアクセス権は別です。読めないが書き込める、という権限を設定することも可能です。 結局、望んでいるアクセスができなければ「昇格して試してみますか?」に落ち着くと思います。 所有者を調べる https://www.wabiapp.com/WabiSampleSource/windows/get_security_descriptor_owner.html > GetFileSecurity()関数にOWNER_SECURITY_INFORMATIONを渡して、 SECURITY_DESCRIPTORを取得し、 GetSecurityDescriptorOwner()関数により所有者のSIDを取得します。 所有者のSIDを文字列へ変換するには、LookupAccountSid()関数を 使用します。
guest

0

自己解決

指摘いただいた点からも考えたのですが、
一応解決策に至ったので、書き込みます。

元々の発端は
1、ユーザーが任意でフォルダを指定できる、
2、だが、指定したフォルダの中に作業用領域フォルダを作りたい、
3、アクセス権の関係なのか、フォルダ自体が作成されない
(CreateDirectory関数を動かしても、フォルダが作成されない)

の流れから、じゃあユーザーが指定したフォルダが、
「OSとかユーザー依存のフォルダを除外しなければならない」
と考え、ファイル、ディレクトリのアクセス権を調べていました。

教えていただいたファイル権限等ございますが、
発想を変えて、「ユーザーが指定したフォルダに作業用フォルダを作って、
フォルダ作成されなかったらエラーとする」
で対応しました。

投稿2019/07/09 02:24

kyosin

総合スコア15

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問