Начать процесс как администратор с известным паролем [duplicate]

Ниже приведен код, который заменяет NULL на ноль в выходном файле.

Создание таблицы и вставка данных:

create table test_table
 (
 date nvarchar(10),
 category char(3),
 amount money
 )

 insert into test_table values ('1/1/2012','ABC',1000.00)
 insert into test_table values ('2/1/2012','DEF',500.00)
 insert into test_table values ('2/1/2012','GHI',800.00)
 insert into test_table values ('2/10/2012','DEF',700.00)
 insert into test_table values ('3/1/2012','ABC',1100.00)

Запрос для генерации точных результатов, который также заменяет NULL с нулями:

DECLARE @DynamicPivotQuery AS NVARCHAR(MAX),
@PivotColumnNames AS NVARCHAR(MAX),
@PivotSelectColumnNames AS NVARCHAR(MAX)

--Get distinct values of the PIVOT Column
SELECT @PivotColumnNames= ISNULL(@PivotColumnNames + ',','')
+ QUOTENAME(category)
FROM (SELECT DISTINCT category FROM test_table) AS cat

--Get distinct values of the PIVOT Column with isnull
SELECT @PivotSelectColumnNames 
= ISNULL(@PivotSelectColumnNames + ',','')
+ 'ISNULL(' + QUOTENAME(category) + ', 0) AS '
+ QUOTENAME(category)
FROM (SELECT DISTINCT category FROM test_table) AS cat

--Prepare the PIVOT query using the dynamic 
SET @DynamicPivotQuery = 
N'SELECT date, ' + @PivotSelectColumnNames + '
FROM test_table
pivot(sum(amount) for category in (' + @PivotColumnNames + ')) as pvt';

--Execute the Dynamic Pivot Query
EXEC sp_executesql @DynamicPivotQuery

OUTPUT:

25
задан John Saunders 29 March 2014 в 14:48
поделиться

1 ответ

Вы должны использовать ShellExecute. ShellExecute - единственный API, который знает, как запустить Consent.exe для повышения.

Пример (.NET) Исходный код

В C # способ, которым вы вызываете ShellExecute, использовать Process.Start вместе с UseShellExecute = true:

private void button1_Click(object sender, EventArgs e)
{
   ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\Notepad.exe");
   info.UseShellExecute = true;
   info.Verb = "runas";
   Process.Start(info);
}

Если вы хотите быть хорошим разработчиком, вы можете поймать, когда пользователь нажал No:

private void button1_Click(object sender, EventArgs e)
{
   const int ERROR_CANCELLED = 1223; //The operation was canceled by the user.

   ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\Notepad.exe");
   info.UseShellExecute = true;
   info.Verb = "runas";
   try
   {
      Process.Start(info);
   }
   catch (Win32Exception ex)
   {
      if (ex.NativeErrorCode == ERROR_CANCELLED)
         MessageBox.Show("Why you no select Yes?");
      else
         throw;
   }
}

Бонус Просмотр

  • UAC - Что. Как. Почему. . Архитектура UAC, объясняя, что CreateProcess не может делать возвышения, только создает процесс. ShellExecute - тот, кто знает, как запустить Consent.exe, и Consent.exe - тот, кто проверяет параметры групповой политики.

Примечание: любой код, выпущенный в общедоступный домен , Не требуется атрибуция.

44
ответ дан Ian Boyd 27 August 2018 в 21:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: