У меня была та же проблема. И после тяжелой работы я нашел легкое и полное решение:
Код выглядит следующим образом:
runas /user:[USERNAME] "psexec -e -h -s -u [USERNAME] -p [PASSWORD] \\[COMPUTERNAME] cmd /C [COMMAND1] & [COMMAND2]"
Если вы хотите отлаживать свой сценарий на другом компьютере, запустите следующий шаблон:
runas /user:[USERNAME] "psexec -i -e -h -s -u [USERNAME] -p [PASSWORD] \\[COMPUTERNAME] cmd /C [COMMAND1] & [COMMAND2] & pause"
Версия Jeff Prosise от MSDN Magazine работает вполне прилично, но это имеет несколько дефектов:
AddNode
волнуется со ссылками на внешние сайты в Вашем меню (www.google.com, и т.д.)
Вот моя фиксация в BuildSiteMap()
:
SiteMapNode node = GetSiteMapNodeFromReader(reader);
string url = node.Url;
if (url.Contains(":"))
{
string garbage = Guid.NewGuid().ToString(); // SiteMapNode needs unique URLs
node.Url = "~/dummy_" + garbage + ".aspx";
AddNode(node, _root);
node.Url = url;
}
else
{
AddNode(node, _root);
}
SQLDependency
кэширование прохладно, но если Вы не хотите совершать поездку к DB каждый раз свои загрузки меню (для проверки, чтобы видеть, изменилась ли зависимость), и меню не изменяются очень часто, то почему бы не использовать HttpRuntime.Cache
вместо этого?
public override SiteMapNode RootNode
{
get
{
SiteMapNode temp = (SiteMapNode)HttpRuntime.Cache["SomeKeyName"];
if (temp == null)
{
temp = BuildSiteMap();
HttpRuntime.Cache.Insert("SomeKeyName", temp, null, DateTime.Now.AddHours(1), Cache.NoSlidingExpiration);
}
return temp;
}
}