2010-09-01 47 views
1

首先,我沒有任何C#技能或經驗。我的一個朋友在大學上了幾堂課,並且能夠給我這個C#程序中迄今爲止所獲得的。以非管理員身份運行C#程序時不會啓動

我讓我的朋友創建一個程序,查看當前登錄用戶全名的WMI,然後查看RegisteredOwner值。如果全名與註冊所有者相同,則程序退出(全部爲無聲),如果全名與註冊所有者不同,那麼程序將啓動帶有文本和是/否選項的表單。如果用戶點擊是,那麼程序將registeredowner值設置爲登錄用戶全名,如果他們點擊「否」,則程序退出。

他提供的是我所要求的,但只有在用戶使用本地管理員權限運行時纔會運行,不幸的是,在我的環境中,沒有用戶是他們計算機上的本地管理員。當我向他提出這個問題時,他不確定他能做些什麼來解決這個問題,並且在整天研究這個問題之後,恐怕沒有什麼可以解決這個問題並讓程序使用本地用戶權限啓動。

所以我的問題是,你是否知道我們可以用這個程序的另一種方式,它可以讓用戶在沒有本地管理權限的情況下運行它?我希望將可執行文件存儲在PC的本地某處,然後在啓動項列表中啓動項目列表中的某項。也許有一種方法,我可以使用可執行文件與非本地管理員權限一起工作,然後使用在System帳戶下運行的Windows服務工作?

當由非本地管理員運行時,啓動腳本時不會發生任何事情。

以下是代碼。

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Management; 
using System.Security.Principal; 
using Microsoft.Win32; 
using System.Threading; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     bool compare; 

    public Form1() 
    { 
     InitializeComponent(); 

     if (PreLoad()) 
      compare = true; 
     else 
     { 
      this.Text = GetUser(); 
      compare = false; 
     } 
    } 

    private bool PreLoad() 
    { 
     string temp = GetCaption(GetUser()); 

     RegistryKey regKey1 = Registry.LocalMachine.CreateSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"); 
     string keyString = regKey1.GetValue("RegisteredOwner").ToString(); 

     if (temp == keyString) 
      return true; 
     else 
      return false; 

    } 
    private void btnYes_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show("Are you sure?", "Confirmation",MessageBoxButtons.OKCancel); 

     string temp = GetCaption(GetUser()); 
     DoRegistryEdit(temp); 
     lblShowAll.Text = "-Successfully registered the machine to: " + temp + " -"; 

     //Refreshes the screen so that the status message displays 
     this.Refresh(); 

     Thread.Sleep(5000); 

     this.Close(); 
    } 

    private void btnNo_Click(object sender, EventArgs e) 
    { 
     //MessageBox.Show("Better change computers then!"); 

     this.Close(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     if (compare) 
      this.Close(); 
    } 

    public string GetCaption(string userName) 
    { 
     String QueryStringTemp = "Select * from Win32_NetworkLoginProfile where Caption = '" + userName +"'"; 
     System.Management.ObjectQuery oQuery = new ObjectQuery(QueryStringTemp); 
     ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oQuery); 

     ManagementObjectCollection oReturnCollection = oSearcher.Get(); 

     string capturedResults = ""; 

     foreach (ManagementObject oReturn in oReturnCollection) 
     { 
      capturedResults += oReturn["FullName"].ToString(); 
     } 
     return capturedResults; 
    } 
    public string GetUser() 
    { 
     System.Management.ObjectQuery oQuery = new ObjectQuery("Select * from Win32_ComputerSystem"); 
     ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oQuery); 

     ManagementObjectCollection oReturnCollection = oSearcher.Get(); 

     string capturedResults = ""; 

     foreach (ManagementObject oReturn in oReturnCollection) 
     { 
      capturedResults += oReturn["UserName"].ToString(); 
     } 

     int hold = capturedResults.IndexOf("\\"); 
     capturedResults = capturedResults.Substring(hold + 1); 
     return capturedResults; 
    } 


    public void DoRegistryEdit(string name) 
    { 
     RegistryKey masterKey = Registry.LocalMachine.CreateSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"); 
     if (masterKey == null) 
      MessageBox.Show("Null Master Key!"); 
     else 
     { 
      try 
      { 
       masterKey.SetValue("RegisteredOwner", name); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Uh OH!" + ex); 
      } 
      finally 
      { 
       masterKey.Close(); 
      } 
     } 
    } 
} 

}

任何意見和建議,將不勝感激!

+0

一個好的開始就是告訴我們什麼時候出現錯誤,當非管理員用戶運行 – pm100 2010-09-01 23:19:43

+0

還提供*代碼*的當前實現。 – TheCloudlessSky 2010-09-01 23:25:51

回答

相關問題