Я собираюсь начать работу над приложением ClickOnce, предназначенным для внутренних клиентов, для использования во внутренней сети организации. Я хочу упростить процесс установки, поэтому я подумал, что разработка приложения с частичным доверием будет хорошей идеей, но теперь я не уверен.
Одна вещь, которую пользователи специально просили, это (сводится к) TextBox
с Cue Text. Самый простой способ обеспечить это на данный момент - это простой подкласс TextBox
, который включает в себя функциональность CueText в качестве свойства. Функциональность Cuetext осуществляется с помощью вызова PInvoke'd для 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
b / c, при каждой попытке оценить свойство SecurityException
выбрасывается еще одно невидимое 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 значение «Включено» вместо «Зона по умолчанию», мне даже не требуется ручное утверждение, все просто происходит. Но, конечно, тогда я предполагаю, что клиент все еще получит запрос на повышение прав.
Можно ли сделать то, что я пытаюсь сделать, из среды частичного доверия? Я начинаю подозревать, что это не б / к, это даже не имело бы смысла. Произвольный частично доверенный код не может быть в состоянии просто вызвать SendMessage, верно? Я начинаю понимать, что я пытаюсь обойти меры безопасности вместо того, чтобы работать внутри них.
Если это так, стоит ли даже усилий разработать это приложение с частичным доверием в качестве приоритета? Или я должен просто смириться с запросом на повышение прав при настройке, чтобы создать полностью доверенное приложение во имя графика и удовлетворения требований пользовательского интерфейса?