組織のイントラネットで使用する内部顧客向けの ClickOnce アプリの作成を開始しようとしています。セットアップ プロセスを簡単にしたいので、アプリを部分的に信頼できるように開発するのは良い考えだと思いましたが、今はよくわかりません。
ユーザーが具体的に要求したことの 1 つは、(要約すると) TextBox
Cue Text を使用することです。現時点でこれを提供する最も簡単な方法はTextBox
、プロパティとして CueText 機能を含む の単純なサブクラスを使用することです。キューテキスト機能は、への PInvoke 呼び出しを介して行われSendMessage()
ます。
protected override void OnHandleCreated(EventArgs e)
{
this.UpdateCueText(); // Bang, you're dead here
base.OnHandleCreated(e);
}
private void UpdateCueText()
{
if (this.IsHandleCreated)
{
NativeMethods.SendMessage(new HandleRef(this, this.Handle), setCueBannerMessage, this.showCueTextWithFocus ? new IntPtr(1) : IntPtr.Zero, this.cueText);
}
}
「あはは! 必要SecurityPermission.UnmanagedCode
です。」デフォルトのイントラネット ゾーン セキュリティには、SecurityPermission
私が知る限りアクセス許可が含まれているので、実行してみると、 への呼び出しで爆発しUpdateCueText()
ます。SecurityException
プロパティを評価しようとすると、SecurityException
別の uninspectable がスローされるたびに、b/c のプロパティを検査することもできますSecurityException
。
私は標準的な変更を試みます:
protected override void OnHandleCreated(EventArgs e)
{
var permission = new SecurityPermission(SecurityPermissionFlag.UnmanagedCode);
permission.Assert();
try
{
this.UpdateCue();
}
finally
{
CodeAccessPermission.RevertAssert();
}
base.OnHandleCreated(e);
}
まだ運がありません。しかし、プロジェクト プロパティのセキュリティ設定ページに移動し、SecurityPermission を "Zone Default" ではなく "Included" に設定すると、手動のアサーションさえ必要なく、すべてが発生します。しかしもちろん、顧客は引き続き昇格のプロンプトを受け取ると思います。
私がやろうとしていることを部分信頼環境から行うことは可能ですか? 私はそれが b/c ではなく、意味をなさないのではないかと疑い始めています。任意の部分的に信頼されたコードは、SendMessage を呼び出すことはできませんよね? セキュリティ対策の範囲内で作業するのではなく、セキュリティ対策を回避しようとしてきたことに気づき始めています。
その場合、部分的な信頼を優先してこのアプリを開発する価値はありますか? それとも、スケジュールと UI 要件を満たすために、完全に信頼できるアプリを作成するために、セットアップ時に昇格プロンプトに辞任する必要がありますか?