2016-03-20 26 views
1

私のportable executableファイルを単一のexeファイルとして提供したいと思います。Portable Executableの保存場所

このexeファイルには、logsを保存するために、いくつかのファイルtxtが必要です。しかし、私はそれを意図せずに削除したくありません。

オペレーティングシステムでadministrative特権を必要とせずに、この種のファイルを実行可能ファイルで保存する標準的な方法はありますか?

ポータブル実行可能ファイルも管理者の権限を必要とせずに実行されます。

また、移植可能な実行可能ファイルによってユーザシステムに書き込むことも推奨されていますか?アンチウイルスソフトウェアはそれに不平を言うことができますか?

+1

乳母のプログラマーになる前に、保護することができるのはあなただけです。私はこれを時間の積極的な使用とは見なさず、Stack Overflowには広すぎます。 –

+0

書き込めないファイルとフォルダがあります。私は書くための適切で標準的なフォルダを求めています。それについての乳母とは何ですか? –

+0

標準の場所は、Users Documentsフォルダのどこかにあります。場所を取得するためのWindows APIがあります。 nannyパートは、誤ってファイルを削除しないようにしています。 – drescherjm

答えて

2

実行可能ファイルは、32ビットプログラムの場合は"C:\Program Files"または"C:\Program Files (x86)"にインストールする必要があります。このインストールには管理者アクセスが必要です。

"c:\Users\UserName\AppData\Local"ディレクトリ(または"c:\My Programs"などの保護されていない他のディレクトリ)には、管理者権限なしでインストールできますが、これは通常ではありません。

ログファイルおよびその他の書き込み可能ファイルは、保護されたProgramFilesディレクトリに移動できません。それらは"c:\Users\UserName\AppData\Local"にあるはずです。

ユーザーファイルはDocumentsディレクトリに存在する必要があります。

プログラムがユーザーにアンインストールを許可する必要があることを忘れないでください。アンインストール情報をレジストリキーに追加します。

"c:\\Program Files\\MyCompany\\MyAppName\\app.exe" 
"c:\\Users\\UserName\\AppData\\Local\\MyCompany\\MyAppName\\app.exe" 

HKEY_LOCAL_MACHINE //or use HKEY_CURRENT_USER if there is no admin access 
    "software\\microsoft\\windows\\currentversion\\uninstall\\My App Name" 
     "UninstallString = full-path-uninstall-command" 

アンインストール文字列は、通常HKEY_LOCAL_MACHINEに追加されますが、インストーラは管理者のアクセス権を持っていない場合、それはVistaまたは高い、使用中にこれらのフォルダを取得するにはHKEY_CURRENT_USER

に行くことができます:

std::wstring documents, appData, programFiles; 

wchar_t *ptr; 
if (S_OK == SHGetKnownFolderPath(FOLDERID_Documents, 0, NULL, &ptr)) 
{ 
    documents = ptr; 
    CoTaskMemFree(ptr); 
} 

if (S_OK == SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, NULL, &ptr)) 
{ 
    appData = ptr; 
    CoTaskMemFree(ptr); 
} 

if (S_OK == SHGetKnownFolderPath(FOLDERID_ProgramFilesX86, 0, NULL, &ptr)) 
{ 
    programFiles = ptr; 
    CoTaskMemFree(ptr); 
} 
+0

Thanks Barmak。これはPortable executableです。ユーザーはそれをダウンロードし、最も一般的にはダウンロードフォルダ内で実行します。だから私は 'c:\ Users \ UserName \ AppData \ Local'の中にすべての余分なファイルを保存する必要がありますか?また、実行可能ファイル自体もAppDataLocalフォルダにコピーする必要がありますか? –

+1

はい、「c:¥Users¥UserName¥AppData¥Local¥MyAppName」などのサブディレクトリを作成することを忘れないでください。あなたのスタンドアローンの* .exeはデジタル署名が必要です。そうしないと、WindowVista以上でブロックされます。これはどのようにインストールされますか?インストーラを使用していますか?インターネットで? –

+0

いいえ、実際にはインストールされていません。ダブルクリックするだけです。それはデジタル署名されていません。 Windowsでは警告が表示されますが、ユーザーが警告のOKをクリックすると使用できます。誤って削除しないように、追加のファイルをユーザシステムに追加したいだけです。 –

関連する問題