2011-07-12 78 views
2

クライアントは、ダウンロードされたセットアップファイルと共にインストールされたアプリケーションを実行するときに「アクセス拒否」例外が発生することを頻繁に報告しています。私たちのインストーラは、 'Program Files'で実行可能ファイルをインストールし、C:\ ProgramDataで構成ファイルを作成します。インストールが完了すると、アプリケーションが自動的に初めて実行されます。次回実行するたびにがアクセスされます。プログラムはC:\ ProgramDataの設定ファイルにアクセスできないため、アクセスは拒否されます。C: ProgramDataからファイルにアクセスしようとすると「アクセスが拒否されました」

はい..「管理者として実行」はソリューションですが、すべての有料ユーザーにそのような操作を依頼することはできません。私はオプションを検索していくつかの方法で特権を設定し、手動で実行可能ファイルを "管理者として実行"として実行します。

私はhelp pageを見つけましたが、それは私のためには機能しません。私のアプリケーションはJavaデスクトップアプリケーションですので、.exe.manifestファイルを作成し、そのマニフェストファイルを画像や他の製品のプロパティファイルがある実行可能ファイルに配置します。

マニフェストが動作しません。「アクセス拒否」問題が発生しています。

これは、マニフェストファイルの内容である - 私はマニフェストどこイメージや他の製品の性質が常駐するファイルをコピーしたことと、私は実行可能ファイルへのアプリケーションマニフェストを添付することができますどのように

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity version="1.0.0.0" 
    processorArchitecture="X86" 
    name="<product_name>" 
    type="win32"/> 
    <description>Description of your application</description> 
    <!-- Identify the application security requirements. --> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
     <requestedPrivileges> 
     <requestedExecutionLevel 
      level="requireAdministrator" 
      uiAccess="true"/> 
     </requestedPrivileges> 
     </security> 
    </trustInfo> 
</assembly> 

現状のコンテンツをコピーしたので、マニフェストファイルを更新する必要がありますか?

例外 -

​​
+0

インストールファイルを右クリックし、[管理者として実行]をクリックしてインストールしないでください。管理者権限を与え、アプリケーションを起動すると「アクセスが拒否される」ことはありません。 –

+0

は '.exe'ファイルと同じディレクトリに同じ名前でなければなりません。 http://msdn.microsoft.com/en-us/library/aa376618(v=VS.85).aspx –

+0

はい私は同じ名前で同じディレクトリで試していましたが、うまくいきませんでした。実行ファイル名が .exeで、マニフェスト名が .exe.manifestであり、同じフォルダにコピーしましたが動作しませんでした。 –

答えて

0

それはアクセスが

が本当にそれをしない拒否されているスロー?

このような例外はありません。

実際例外であり、実際のメッセージ、およびコードのどの実際ラインは、それがでスローされますか?

+0

オリジナルの投稿を編集しました。実際の例外 –

+0

@Ashish Pancholiを見て、プログラムを実行したユーザーがそのディレクトリにアクセスできないようにしてください。おそらく、それはプログラムをインストールしたユーザーとは異なるユーザーでした。あなたはWindows権限の悪夢の中で、特にVistaの下で絡まっています。インストール戦略を確認する必要があります。これはWindowsの問題です。 – EJP

+0

私はこの問題を調査し、適合した後にこのスレッドを開始しました。私はここから解決策を得ました - http://stackoverflow.com/questions/1385866/java-run-as-administratorしかし、残念ながら、これは私のために働いていません。 –

1

問題は、ユーザー設定ファイルが間違った場所に格納されているためです。

実行可能なバイナリと関連リソースのみがProgramDataディレクトリ( "C:¥Program Files ...")に属し、このデータは、管理者権限を持つユーザーがプログラムのインストールをインストールまたは更新するときに変更する必要があります。ユーザーが変更する必要がある設定やデータは、ホームフォルダ、マイドキュメント、HKEY_CURRENT_USERレジストリキー、またはそれらのAppDataディレクトリなど、編集権限がある場所に保存する必要があります。

これらの詳細については、 Windows programming requirements for user data storage herehere is how some people have done this in Javaを参照してください。希望はあなたを修正するのに役立ちます!

PROCMON.EXEのようなツールを使用すると、読み込み、書き込みのためのファイル/ディレクトリを開いているかどうかを示すため、拒否の詳細を絞り込むことができます既に存在するファイルを作成しようとしています。

+0

"ProgramData"と "Program Files"は同じではありません。 「Program Files」はバイナリと読み取り専用ファイルの場所ですが、あなたが述べたように、ProgramDataはVistaのCSIDL_COMMON_APPDATAに対する答えです。以前は、Windows XPでは「C:¥Documents and Settings¥All Users¥Application Data」を使用していました。 – jveazey

+0

あなたはまったく正しいです、@ジョン・L・ベアゼイ...私はもっと慎重に読むべきです!私の(間違った)答えを取り除く。 – ewall

0

最も簡単な解決策は、xcacls.exe utilityまたはicacls.exe utilityを使用することです。それらを使用して、C:\ ProgramData内の "Everyone"または読み取り/書き込み/ etc設定ファイルのアクセス許可を誰にでも与えることができます。

注:だけ、あなたのプログラムからアクセスするために必要なファイルのアクセス権を変更することを確認します。 ProgramDataはシステムフォルダであり、一般的にアクセス可能であってはなりません。

更新:また、マニフェストを実行可能ファイルにRT_MANIFESTリソースとして埋め込む必要があります。これはManifest Tool (mt.exe)で簡単に行うことができます。この詳細については、answerを参照してください。

関連する問題