2012-03-18 8 views
3

Delphi 2010delphiアプリケーションに権限の問題があります。どうして?

Windows 7 - 64ビット。

私はかなり些細なアプリを持っています。それはデータベースアプリです。起動し、現在のディレクトリを探し出し、そのディレクトリ内のデータベースファイルを探して開き、いくつかのデータを表示します。それは私のdevコンピュータで正常に動作します。私は別のコンピュータにも、Windows 7,64ビット、それを取ると、私はエラーが発生します。 (特に、データベースライブラリ - コンポーネントAce - 列が存在しないことを示します)。私はこれが一般的なアクセスエラーだと考える必要があります。デスクトップアイコンを右クリックして[管理者として実行]を選択すると、正常に動作します。明示的に何かをロックしていない。私は管理者ユーザーとしてコンピュータにいます。アプリをインストールしたのは管理者です。私はこのアプリを複数の人に配布しようとしています。私が使用しているインストールルーチンはInnoSetupです。実行中のアクセス許可の問題の種類

完全性のために、私はINNO SETUP.issファイルを含めています。 おかげ GS

; Script generated by the Inno Setup Script Wizard. 
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! 

#define MyAppName "DocAssist" 
#define MyAppVerName "DocAssist 3.2" 
#define MyAppPublisher "GS" 
#define MyAppExeName "DocAssist.exe" 

[Setup] 
; NOTE: The value of AppId uniquely identifies this application. 
; Do not use the same AppId value in installers for other applications. 
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) 
AppId={{6F34D198-14A0-4398-8E82-34232956CC5B} 
AppName={#MyAppName} 
AppVerName={#MyAppVerName} 
AppPublisher={#MyAppPublisher} 
DefaultDirName={pf}\{#MyAppName} 
DefaultGroupName={#MyAppName} 
AllowNoIcons=yes 
OutputDir=D:\Projects\DocAssist\DISTR 
OutputBaseFilename=DocAssistV3Setup 
Compression=lzma 
SolidCompression=yes 
AppCopyright=GS 
VersionInfoVersion=3.2 

[Languages] 
Name: english; MessagesFile: compiler:Default.isl 

[Tasks] 
; Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked 
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; 

[Files] 
Source: D:\Projects\DocAssist\DISTR\DocAssist.exe; DestDir: {app}; Flags: ignoreversion 
Source: D:\Projects\DocAssist\DISTR\DocAssist.ABS; DestDir: {app}; Flags: ignoreversion 
Source: D:\Projects\DocAssist\DISTR\StopWords.txt; DestDir: {app}; Flags: ignoreversion 
; NOTE: Don't use "Flags: ignoreversion" on any shared system files 
Source: DocAssist Version 3_2.pdf; DestDir: {app}; Flags: isreadme 
; Add-in dll 
Source: D:\Projects\DocAssist\DISTR\DocAssistCom.dll; DestDir: {app}; Flags: regserver 
Source: D:\Projects\DocAssist\DISTR\gdiplus.dll;  DestDir: {app}; Flags: ignoreversion 

[Icons] 
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName} 
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe} 
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon 

[Run] 
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#MyAppName}}; Flags: nowait postinstall skipifsilent 


[Registry] 
Root: HKLM; Subkey: SOFTWARE\DocAssist; ValueType: none; Permissions: admins-full; Flags: uninsdeletekey createvalueifdoesntexist; 
Root: HKLM; Subkey: SOFTWARE\DocAssist; ValueType: string; ValueName: InstallDir; ValueData: {app}; Permissions: admins-full; Flags: uninsdeletekey createvalueifdoesntexist 
+1

プログラムはどこにインストールされていますか? Program Filesの下にインストールされていますか? –

+0

デフォルトの場所はc:¥program files(x86)¥DocAssist – user1009073

+1

プログラムデータやAppDataフォルダを使用してプログラム設定やデータベースなどのファイルを保存する必要があるようです – teran

答えて

13

あなたのプログラムファイルディレクトリ内のファイルに書き込むべきではありません。これはWindows 95以降では推奨されていませんが、Windows Vista以降、管理者でない限り、より厳密になり、デフォルトでは許可されません。

他の多くの場所に書き込むことができ、App DataはMy Documentsと同様によく使用されるフォルダです。 SHGetSpecialFolderLocation apiを使用すると、これらの特別なフォルダの正確な場所を見つけることができます(インストールごとに異なるため)。

b.w.アプリケーションディレクトリを使用する必要がある場合は、現在のディレクトリではなく、Application.ExeNameまたはParamStr(0)を使用します。

+0

私はApplication.ExeNameを使用しています。 – user1009073

+2

その場合、その旨を忘れてください。投稿の残りの部分は残っています:あなたはそれを取得しましたが、あなたはアプリケーションフォルダに全く書き込むべきではありません。 – GolezTrol

+0

これは私の犯人のようです... – user1009073

関連する問題