2017-05-23 8 views
-1

私はアプリケーションを開発しました。私はクライアントネットワークの1台のマシンに展開したいと思っています。 このマシンはwin7 64ビットで動作し、管理者の承認が必要です(彼らはアクティブディレクトリ、GPOなどを使用します)。これまでのところ問題ありません。 ローミングフォルダを使用していくつかのファイルを保存しています。 問題は、アプリケーションを起動すると正しい現在のユーザーのローミングフォルダパスが見つからないようですが、管理ローミングフォルダにリダイレクトされたと思います。Delphiのローミングフォルダ、レジストリへのアクセス

function GetSpecialFolderPath(folder : integer) : string; 
const SHGFP_TYPE_CURRENT = 0; 
var path: array [0..MAX_PATH] of char; 
begin 
if SUCCEEDED(SHGetFolderPath(0,folder,0,SHGFP_TYPE_CURRENT,@path[0]))  
    then Result := path 
else 
Result := ''; 
end; 

また、私はそれを行うのが、私のアプリケーションがそれらにアクセスすることはできません、HKEY_CURRENT_USERの下のレジストリにいくつかの値を登録する必要があります。

GetSpecialFolderPathは次のように定義されて
Function GetRoamingFolderPath():String; 
var 
OsVersion: integer; 
Path: String; 
begin 
OsVersion:=(TOSVersion.Major); 
if OsVersion < 6 then 
Path:= GetSpecialFolderPath(CSIDL_COMMON_APPDATA) 
else 
path:= GetSpecialFolderPath(CSIDL_APPDATA); 
end; 

に従うよう 私のコードです!

どのようにこの2つの問題を解決するためのアイデア。ありがとう。

+0

エラーコードがあれば、それを確認するのは妥当ではないでしょうか? –

+0

私は取得しています:キーが見つからず、フォルダと同じものが見つかりません – user2224150

+0

レジストリへのアクセスのコードを提供していないので、一度に1つの質問を扱います。レジストリの問題に関する新しい質問を投稿してください。 SHGetFolderPath()が返すエラー番号は何ですか? [documentation](https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v = vs.85).aspx)では、コードの意味について何を言いますか? Btw、 'SHGetFolderPath()'は非推奨です。あなたはVistaの前にOSをサポートする必要がありますか? –

答えて

3
Function GetRoamingFolderPath():String; 
var 
OsVersion: integer; 
Path: String; 
begin 
OsVersion:=(TOSVersion.Major); 
if OsVersion < 6 then 
Path:= GetSpecialFolderPath(CSIDL_COMMON_APPDATA) 
else 
path:= GetSpecialFolderPath(CSIDL_APPDATA); 
end; 

この関数はローカル変数pathに割り当てますが、戻り値は割り当てません。したがって、その戻り値は未定義です。変数pathを削除し、代わりにResultに割り当ててください。

function GetRoamingFolderPath: string; 
begin 
    if TOSVersion.Major < 6 then 
    Result := GetSpecialFolderPath(CSIDL_COMMON_APPDATA) 
    else 
    Result := GetSpecialFolderPath(CSIDL_APPDATA); 
end; 

これは、デバッガでコードをステップ実行して中間値を検査していれば明らかです。 GetSpecialFolderPathが希望の値を返したが、それはGetRoamingFolderPathで失われていることがわかりました。一度あなたがその観察をしたならば、それは何が間違っていたのかが明らかになりました。私はこのような問題に遭遇したときに、将来このようにデバッグすることをお勧めします。

関連する問題