2011-01-19 15 views
2

私はC#でアプリケーションを開発しました。これは、レジストリ(現在のユーザーハイブ)を使用してWindowsの起動時に実行されるオプションです。 VSまたはbinフォルダからアプリケーションを実行すると、このオプションが機能します。ClickOnceアプリケーションレジストリの保守問題を実装しました

(Internetから実行する)ClickOnceインストーラを作成してCodeplexに配置すると、アプリケーションのインストール後にこのオプションが機能しません。例外はありません。レジストリに書き込むだけです。私はある種のセキュリティ問題があると思います。

私は、アプリケーションがインストールされた後、CD /ローカルストレージから実行するオプションを持つClickOnceインストーラを作成しようとしました。 ClickOnce Webインストーラー(CodePlexを置く)を使用してインストールしただけでは機能しません。

パブリッシュ設定を見て、デフォルト=完全信頼に設定されています。スタートアップのオプション作業で実行するために今何をすべきかわからない。

答えて

3

書き込みを実行して元のアプリケーションの参照に追加する2番目の(コンソール)アプリケーションを作成します。

ユーザーがアプリケーションを起動したときに、前述のコンソールアプリケーションwith elevated rightsを実行していない場合は、レジストリキーが設定されているかどうかを確認します。ユーザーは管理権限を要求され、書き込み操作は成功するはずです。

メインアプリケーションでは、コンソールアプリケーションへの参照を追加する必要があります。アセンブリの参照を容易にするために、コンソールアプリケーションには少なくとも1つのパブリッククラスが必要です。そのため、タイプと型を取得できるので、ファイル名を取得するためにマジック文字列を使用する必要はありません。例:

Process.Start(
     new ProcessStartInfo 
     { 
      Verb = "runas", 
      FileName = typeof(SomeClassInOtherAssembly).Assembly.Location, 
      UseShellExecute = true, 
      CreateNoWindow = true // Optional.... 
     }).WaitForExit(); 

また、this nice blog posts。

+0

Windows 7でうまく動作します。Windows XPでは、現在のユーザー(ローカル管理者)を選択してコンソールアプリケーションを実行するユーザーを選択するように求められています。コンソールアプリケーションがクラッシュしました。「ランタイムこのアプリケーションを実行するには " –

+0

runas動詞なしでxpを勝ち取るのにうまくいきますか? – m0sa

+0

それはありがとうと思います –

0

あなたはHKCUに書き込むことができるはずです(これは正常に実行できます)。あなたがしたい場合は、レジストリにエントリを書き込むために使用しているコードをポストバックと私は見てみましょう。

EDIT

このブログの記事では、プログラムの読み取りとレジストリから/への書き込み方法を示しています。私はClickOnceを使ってこれをデプロイしました。

http://robindotnet.wordpress.com/2010/05/31/enhanced-logging-in-clickonce-deployment/

(記事の最後にVBとC#の両方で全体のソリューションがありますあなたのコードでは、私には外の強打を見ていないが、あなたはこのコードを試してみて、それが動作するかどうかを確認することができます)。そうであれば、コードに何か問題があります。それが動作しない場合、私はあなたに何を伝えるべきか分からない。

+0

記事のコードは私のものとまったく同じだと思います –

+0

ユーザーのマシンで、そのキーにレジストリを開いて権限を確認できますか?または\\ Runフォルダにありますか? – RobinDotNet

+0

コードをダウンロードして、私が投稿したソリューションを試してみたら、それはあなたのために働くのですか? – RobinDotNet

関連する問題