1

UAC がオンのときに、管理者として実行せずに C++ でファイルを作成するにはどうすればよいですか?

Vista の UAC がオンの場合、VC++ 6.0 で「C:\Programdata\Desktop」というパスにテキスト ファイルを作成しようとしています。ただし、Createfile(...)「許可が拒否されました」で失敗しました。

「管理者として実行」でサンプル アプリケーションを実行すると、動作します。しかし、私のサンプル アプリケーションは「管理者として実行」されるべきではありません。

UACがオンのときに、上記のパスに許可を与えるAPIはありますか?

サンプル コード: const nSize = 100; CStdioFile ファイル。CFileException obFileExp; CString csFilePath(_T("C:\ProgramData\Desktop\sample.txt"));

if (!file.Open( csFilePath , CFile::modeCreate | CFile::modeWrite ,&obFileExp ) )
{
    // opening of file failed  
    TCHAR szErr[nSize];
    obFileExp.GetErrorMessage(szErr,nSize);
    AfxMessageBox(szErr);
    return ;
}  

file.WriteString( "welcome" );

file.Close( );

注: UAC をオンにし、VC++ 6.0 を管理者として実行しないでください。

4

4 に答える 4

5

C:\ProgramData\Desktop は、C:\Users\Public\Desktop のエイリアスです。これは、すべてのユーザーが共有するデスクトップであり、システム管理者が構成することを意図しています。

UAC が有効になっていると、ゲスト、ユーザー グループのメンバー、または管理者グループの昇格されていないメンバーが、Windows のセキュリティ モデル全体を破壊することなく、共有デスクトップにファイルまたはフォルダーを作成する方法がありません。

たとえば、アプリのセットアップ中の UAC の昇格中に管理者アカウントを使用して、Public\ 内のサブフォルダーまたはファイルに対する何らかの作成/書き込み制御をユーザー グループのメンバーに付与するアクセス制御リスト エントリを追加することができます。デスクトップ。

したがって、「サンプル プログラム」が昇格されていないアカウントから共有の場所にファイルを書き込む方法を実証しようとしている場合を除き、ユーザー自身のデスクトップ (c:\Users\YourUserAccount\Desktop) にファイルを作成する方がはるかに優れています。取得するパスは、もちろん適切な (SHGetSpecialFolderLocation) API を使用しています!

于 2009-07-02T09:35:51.843 に答える
2

どこかに何かを書くことが許可されていない場合は、許可されていません。なんとなくできればハッキングです。

そうは言っても、私が最後に知っていたのは、アプリケーションがvistaでプログラムデータに書き込むことができるということでした。それがやるべきことです。プログラムデータを保存します。しかし、その中のデスクトップフォルダーについてはわかりません。私の知る限り、vista にはそのような標準フォルダはありません。

そのフォルダに保存しようとしているものを正確に説明してください。

于 2009-07-02T08:21:19.390 に答える
0

私の知る限り、UACがオンの場合、制限付きフォルダーであるC:\ Program Filesに書き込む必要があります。管理者権限が必要です。

回避策はありません。せいぜい UAC がアプリケーションを仮想化する可能性があるため、アプリケーションは C:\Program Files に書き込みを行うと見なされますが、実際には %UserProfile% に存在する仮想フォルダーに書き込みます。

ユーザーに常に右クリック->実行を行わせる代わりに、権限を「RequireAdministrator」に設定してマニフェストを(外部マニフェストツールを使用して)埋め込むことができます。したがって、アプリが実行されるたびに、アプリの昇格を許可するかどうかをユーザーに確認するプロンプトが表示されます。

プログラムデータに書き込む必要がある場合、管理者権限は必要ありません。

于 2009-07-02T08:21:26.207 に答える
0

The Manifest File Mechanismをご覧ください。

マニフェストをexeに埋め込むか、権限を制御できる別のマニフェストファイルを作成できます。

于 2009-07-02T08:24:48.760 に答える