2016-10-12 4 views
-3

Простой вопрос, но не нашел ничего полезного. Мне нужно перебирать файлы и проверять, есть ли у них права администратора. Но помните, что файл не запущен, поэтому мне нужно в основном проверить, установлен ли флажок «запускать как администратора» true или false. Вероятно, это имеет какое-то отношение к атрибутам, которые я думаю. Итак, как я мог это достичь? (Я понятия не имею ...)Как я могу проверить, является ли файл (non process) администратором

Редактировать: Я нашел другой способ сделать это, я еще не тестировал его. Чтобы запустить файл как процесс, немедленно (без Thread.Sleep или каких-либо операций) приостановите основной поток вновь созданного процесса. Затем процесс проще проверять на повышенные права, чем простой файл, потому что время выполнения является фактическим «реальным» способом, которым ведет файл.

+0

15 секунд поиска: http://stackoverflow.com/questions/2313045/how-to-set-run-this-program-as-an-administrator-programatically – itsme86

+0

Существует несколько способов настройки процесса для выполнения с повышенными привилегиями, включая сам процесс. Если вы просто хотите узнать состояние флажка в ярлыке Windows Shell, вам нужно искать темы, которые конкретно обсуждаются. Из вашего вопроса неясно, каков ваш фактический _goal_ (например, почему вы беспокоитесь об этой настройке?), Но поскольку ваш вопрос слишком широк. Некоторые соответствующие должности включают http://stackoverflow.com/questions/2818179/how-do-i-force-my-net-application-to-run-as-administrator, ... –

+0

https://stackoverflow.com/ вопросы/16926232/run-process-as-administrator-from-a-non-admin-application, https://stackoverflow.com/questions/11785413/set-administrative-privileges-in-c-sharp, https: // stackoverflow.com/questions/8802261/c-sharp-exe-should-ask-for-run-as-administrator-prompt-when-opened, https://stackoverflow.com/questions/1726048/runasadmin-in-registry- doesnt-seem-to-work-in-windows-7, https://stackoverflow.com/questions/1220213/detect-if-running-as-administrator-with-or-without-elevated-privileges, ... –

ответ

1

Вы можете использовать нижеследующий метод. Вы можете определить переменную в соответствии с вашими требованиями.

string sShortcutPath=""; 
     string sAppName=""; 
     string sDesktopPath=""; 
     string vbScript = GENERICVBFILE.Replace("@@[email protected]@", sShortcutPath); 
     vbScript = vbScript.Replace("@@[email protected]@", sAppName); 
     vbScript = vbScript.Replace("@@[email protected]@", sDesktopPath); 
     string vbFile = "Script.vbs"; 
     if (File.Exists(vbFile)) 
      File.Delete(vbFile); 
     File.WriteAllText(vbFile, vbScript); 
     Process cProc = new Process(); 
     cProc.StartInfo.FileName = "cscript.exe"; 
     cProc.StartInfo.Arguments = vbFile; 
     cProc.StartInfo.UseShellExecute = false; 
     cProc.StartInfo.CreateNoWindow = true; 
     cProc.Start(); 


    public const string GENERICVBFILE = 
     "Option Explicit\n" + 
     "Dim ShellApp, FSO, Desktop\n" + 
     "Set ShellApp = CreateObject(\"Shell.Application\")\n" + 
     "Set FSO = CreateObject(\"Scripting.FileSystemObject\")\n" + 

     "Set Desktop = ShellApp.NameSpace(\"@@[email protected]@\")\n" + 
     "Dim LnkFile\n" + 
     "LnkFile = \"@@[email protected]@\"\n" + 

     "If(FSO.FileExists(LnkFile)) Then\n" + 
     "Dim verb\n" + 
     "Dim desktopImtes, item\n" + 
     "Set desktopImtes = Desktop.Items()\n" + 

     "For Each item in desktopImtes\n" + 
     "If (item.Name = \"@@[email protected]@\") Then\n" + 
     "For Each verb in item.Verbs\n" + 
     "If (verb.Name = \"Run as &administrator\") _\n" + 
     "Then\n" + 
     "verb.DoIt\n" + 
     "End If\n" + 
     "Next\n" + 
     "End If\n" + 
     "Next\n" + 
     "End If"; 
} 
+0

Хорошо ... im не эксперт vbscript на самом деле, но ... вы дали код, который создает vbscript, а сам скрипт проверяет, является ли указанный файл администратором или нет. Некоторые незначительные проблемы ... каждый проверенный файл, не было бы немного дорогостоящим, если бы каждый раз запускал файл vbscript ... во-вторых, как будет работать программное обеспечение C# с этим файлом vbscript. Вероятно, это потребует сложной связи с клиентским сервером. Но в любом случае спасибо за ваши усилия – Yogibear

+0

Но вы можете использовать этот код в своем проекте C#. –

+0

Я не знаю, могу ли я, вероятно, использовать его как dll, возможно ... – Yogibear

0

Хорошо, я получил много комментариев, и получил едва использовать ресурсы, вероятно, моя вина для не ясный вопрос. То, что я написал о флажке, может показаться глупым, на самом деле это была просто помощь, чтобы лучше понять, что я имею в виду, своего рода символом, но это просто смутило вас, поскольку вы все думали о самом графическом интерфейсе, что, конечно, не имеет ничего общего с привилегии файла. Это может быть так, что мой основной язык не является английским, поэтому он может сделать его действительно непонятным. Я чувствую, что некоторые из вас даже не прочитали вопрос достаточно (или думаю ...). Я получил хороший ответ от

Вивек Nuna

но его/ее ответ кажется слишком сложным для истинной цели, поэтому я полагаю, я найду другой способ сделать это. Во всяком случае, большое спасибо тем, кто действительно имел цель помочь. Я скоро закрою этот вопрос.

+0

Я нашел способ, я запустил подозрительные файлы как процесс, который был проверен другими методами, такими как проверки сертификатов (чтобы ускорить процедуру) и немедленно приостановить их основной поток, то это означает, что я могу проверить его привилегии , поскольку это уже процесс. – Yogibear

+0

Ну, я не могу удалить этот вопрос, поэтому я бы оценил, если кто-то отметит его для замедлителя, чтобы закрыть его. – Yogibear

+0

Точка была сделана ..., я просто хотел скрыть «стыд» от непонимания, но это правда, я согласен с этим , потому что это может быть способ ее достижения. – Yogibear