c#實現的破解程式--針對軟體使用時間限制

猴小新發表於2013-02-22

自己搗騰了一天,弄了一個修改軟體過期的小程式,主要是自己有幾款有時間限制的軟體,每次改時間很麻煩。有了這個程式就可以一勞永逸了。

前提:只適用於修改作業系統時間後,程式就能夠正常使用的那種軟體。如Lingoes,reflector,這兩款我測試是可以的。

在Win7下必需用管理員的方式啟動。

思路很簡單:

1,修改作業系統時間到軟體過期前。

2,啟動軟體。

3,改回作業系統時間。

程式類似於網上的一款好像叫RunAsDate的軟體,沒用過,只大概記得它的介面,決定自己實現類似的功能。

該程式的亮點是

1,可以生成破解程式的快捷方式到桌面上,生成的快捷方式圖示和原來的程式一樣(有輕度的失真),生成這個快捷方式後,就不用這個破解程式了,這個才是我要的一勞永逸的東西。

2,對原來的程式exe檔案做了備份,避免因破解不成功,軟體自身因過期啟動自我銷燬的情況。如:Refletor就是其中一例。

先看一張程式介面圖:

基本操作:

破解啟動:介面功能很簡單,一看就會用。有效時間一般不知道有效時間,不要指定。選中待破解的程式路徑,點“破解啟動”按鈕,就可以啟動程式,但是這種方式只能單次啟動,也就是每次都要啟動這個破解程式。

快捷方式生成:在“破解啟動”成功的前提下,生成的快捷方式才可用。這種方式可以一勞永逸的生成桌面圖示,下次也不用啟動這個破解程式了。

下面這兩個是生成的快捷方式圖示:

快捷方式名稱欄,可以輸入名稱來生成快捷方式。

如下圖:

點快捷方式生成後:

不錯,以後我就可以在桌面上直接啟動這些過期的軟體了。

下面貼出主要的程式碼程式:

Win32API

[csharp] view plaincopy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4. using System.Runtime.InteropServices;  
  5.   
  6. namespace ApplicationActive  
  7. {  
  8.     [StructLayout(LayoutKind.Sequential)]  
  9.     public struct SYSTEMTIME  
  10.     {  
  11.         public ushort wYear;  
  12.         public ushort wMonth;  
  13.         public ushort wDayOfWeek;  
  14.         public ushort wDay;  
  15.         public ushort wHour;  
  16.         public ushort wMinute;  
  17.         public ushort wSecond;  
  18.         public ushort wMilliseconds;  
  19.   
  20.         public void FromDateTime(DateTime dateTime)  
  21.         {  
  22.             wYear = (ushort)dateTime.Year;  
  23.             wMonth = (ushort)dateTime.Month;  
  24.             wDayOfWeek = (ushort)dateTime.DayOfWeek;  
  25.             wDay = (ushort)dateTime.Day;  
  26.             wHour = (ushort)dateTime.Hour;  
  27.             wMinute = (ushort)dateTime.Minute;  
  28.             wSecond = (ushort)dateTime.Second;  
  29.             wMilliseconds = (ushort)dateTime.Millisecond;  
  30.         }  
  31.   
  32.         public DateTime ToDateTime()  
  33.         {  
  34.             return new DateTime(wYear, wMonth, wDay, wHour, wMinute, wSecond);  
  35.         }  
  36.     }  
  37.   
  38.     [Flags]  
  39.     enum SHGFI : int  
  40.     {  
  41.         /// <summary>get icon</summary>  
  42.         Icon = 0x000000100,  
  43.         /// <summary>get display name</summary>  
  44.         DisplayName = 0x000000200,  
  45.         /// <summary>get type name</summary>  
  46.         TypeName = 0x000000400,  
  47.         /// <summary>get attributes</summary>  
  48.         Attributes = 0x000000800,  
  49.         /// <summary>get icon location</summary>  
  50.         IconLocation = 0x000001000,  
  51.         /// <summary>return exe type</summary>  
  52.         ExeType = 0x000002000,  
  53.         /// <summary>get system icon index</summary>  
  54.         SysIconIndex = 0x000004000,  
  55.         /// <summary>put a link overlay on icon</summary>  
  56.         LinkOverlay = 0x000008000,  
  57.         /// <summary>show icon in selected state</summary>  
  58.         Selected = 0x000010000,  
  59.         /// <summary>get only specified attributes</summary>  
  60.         Attr_Specified = 0x000020000,  
  61.         /// <summary>get large icon</summary>  
  62.         LargeIcon = 0x000000000,  
  63.         /// <summary>get small icon</summary>  
  64.         SmallIcon = 0x000000001,  
  65.         /// <summary>get open icon</summary>  
  66.         OpenIcon = 0x000000002,  
  67.         /// <summary>get shell size icon</summary>  
  68.         ShellIconSize = 0x000000004,  
  69.         /// <summary>pszPath is a pidl</summary>  
  70.         PIDL = 0x000000008,  
  71.         /// <summary>use passed dwFileAttribute</summary>  
  72.         UseFileAttributes = 0x000000010,  
  73.         /// <summary>apply the appropriate overlays</summary>  
  74.         AddOverlays = 0x000000020,  
  75.         /// <summary>Get the index of the overlay in the upper 8 bits of the iIcon</summary>  
  76.         OverlayIndex = 0x000000040,  
  77.     }  
  78.   
  79.     [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]  
  80.     public struct SHFILEINFO  
  81.     {  
  82.         public SHFILEINFO(bool b)  
  83.         {  
  84.             hIcon = IntPtr.Zero;  
  85.             iIcon = 0;  
  86.             dwAttributes = 0;  
  87.             szDisplayName = "";  
  88.             szTypeName = "";  
  89.         }  
  90.         public IntPtr hIcon;  
  91.         public int iIcon;  
  92.         public uint dwAttributes;  
  93.         [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]  
  94.         public string szDisplayName;  
  95.         [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]  
  96.         public string szTypeName;  
  97.     };  
  98.   
  99.     class Win32API  
  100.     {  
  101.         [DllImport("user32.dll", EntryPoint = "FindWindow")]  
  102.         public static extern IntPtr FindWindows(string lpClassName, string lpWindowName);  
  103.         [DllImport("kernel32.dll")]  
  104.         public static extern bool SetLocalTime(ref SYSTEMTIME Time);  
  105.         [DllImport("shell32.dll", CharSet = CharSet.Auto)]  
  106.         public static extern int SHGetFileInfo(  
  107.           string pszPath,  
  108.           int dwFileAttributes,  
  109.           out    SHFILEINFO psfi,  
  110.           uint cbfileInfo,  
  111.           SHGFI uFlags);  
  112.   
  113.     }  
  114. }  


建立圖示,備份,啟動用的共通類 

[csharp] view plaincopy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Windows.Forms;  
  4. using System.Text;  
  5. using System.Drawing;  
  6. using System.Runtime.InteropServices;  
  7. using IWshRuntimeLibrary;  
  8. using System.IO;  
  9. using System.Diagnostics;  
  10.   
  11. namespace ApplicationActive  
  12. {  
  13.     class CommonFunction  
  14.     {  
  15.         public enum StartMode  
  16.         {  
  17.             WinForm,  
  18.             ShortCut  
  19.         }  
  20.         public static readonly string CRACK_FOLDER_NAME = "xsw_Crack";  
  21.         public static readonly string CONFIG_NAME = "xsw_Crack.xml";  
  22.         public static StartMode Mode = StartMode.WinForm;  
  23.   
  24.         private static Icon GetIcon(string strPath, bool bSmall)  
  25.         {  
  26.             SHFILEINFO info = new SHFILEINFO(true);  
  27.             int cbFileInfo = Marshal.SizeOf(info);  
  28.             SHGFI flags;  
  29.             if (bSmall)  
  30.                 flags = SHGFI.Icon | SHGFI.SmallIcon | SHGFI.UseFileAttributes;  
  31.             else  
  32.                 flags = SHGFI.Icon | SHGFI.LargeIcon;  
  33.   
  34.             Win32API.SHGetFileInfo(strPath, 256, out info, (uint)cbFileInfo, flags);  
  35.             return Icon.FromHandle(info.hIcon);  
  36.         }  
  37.   
  38.         public static string GetCrackFolderPath(string strPath)  
  39.         {  
  40.             string dirName = Path.GetDirectoryName(strPath);  
  41.             dirName += "\\" + CRACK_FOLDER_NAME;  
  42.             if (!Directory.Exists(dirName))  
  43.             {  
  44.                 Directory.CreateDirectory(dirName);  
  45.             }  
  46.             return dirName;  
  47.         }  
  48.   
  49.         public static void CreateShortCut(string strPath, string shortcutName)  
  50.         {  
  51.             string shortcutPath;  
  52.             string shortcutIconLocation;  
  53.             string crackFolder;  
  54.   
  55.             crackFolder = GetCrackFolderPath(strPath);  
  56.             shortcutPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\" + shortcutName + ".lnk";  
  57.             shortcutIconLocation = crackFolder + "\\" + shortcutName + ".ico";  
  58.   
  59.             //create Icon  
  60.             Icon shortcutIcon = GetIcon(strPath, false);  
  61.             FileStream fs = new FileStream(shortcutIconLocation, FileMode.OpenOrCreate, FileAccess.Write);  
  62.             shortcutIcon.Save(fs);  
  63.             fs.Close();  
  64.   
  65.             //copy crack program file  
  66.             string crackFileName = new FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).Name;  
  67.             if (!System.IO.File.Exists(crackFolder + "\\" + crackFileName))  
  68.             {  
  69.                 System.IO.File.Copy(System.Reflection.Assembly.GetExecutingAssembly().Location, crackFolder + "\\" + crackFileName, true);  
  70.             }  
  71.             System.IO.File.Copy(Application.StartupPath + "\\" + CommonFunction.CONFIG_NAME, crackFolder + "\\" + CommonFunction.CONFIG_NAME,true);  
  72.             BackupTargetFile(strPath);  
  73.   
  74.             WshShell shell = new WshShell();  
  75.             IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(shortcutPath);  
  76.             shortcut.Arguments = "\"" + strPath + "\"";  
  77.             shortcut.TargetPath = crackFolder + "\\" + crackFileName;  
  78.             shortcut.WorkingDirectory = crackFolder;  
  79.             shortcut.WindowStyle = 1; //normal  
  80.             shortcut.IconLocation = shortcutIconLocation;  
  81.             shortcut.Save();  
  82.         }  
  83.   
  84.         public static void BackupTargetFile(string strPath)  
  85.         {  
  86.             string strFileTo = GetCrackFolderPath(strPath) +"\\" + new FileInfo(strPath).Name;  
  87.             if (!System.IO.File.Exists(strFileTo))  
  88.             {  
  89.                 System.IO.File.Copy(strPath, strFileTo);  
  90.             }  
  91.         }  
  92.   
  93.         public static void StartProgram(string path, DateTime? settingDate)  
  94.         {  
  95.             System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();  
  96.             DateTime NowDate = DateTime.Now;  
  97.             stopWatch.Start();  
  98.   
  99.             //back up EXE file  
  100.             BackupTargetFile(path);  
  101.             FileInfo fileInfo = new System.IO.FileInfo(path);  
  102.             DateTime validDateTime = fileInfo.CreationTime > fileInfo.LastWriteTime ? fileInfo.LastWriteTime : fileInfo.CreationTime;  
  103.   
  104.             if (settingDate.HasValue)  
  105.             {  
  106.                 validDateTime = settingDate.Value;  
  107.             }  
  108.   
  109.             //update date  
  110.             SYSTEMTIME st = new SYSTEMTIME();  
  111.             st.FromDateTime(validDateTime);  
  112.             Win32API.SetLocalTime(ref st);  
  113.             System.Threading.Thread.Sleep(1000);  
  114.             try  
  115.             {  
  116.                 //start program  
  117.                 ProcessStartInfo PstartInfoExe = new ProcessStartInfo();  
  118.                 PstartInfoExe.FileName = path;  
  119.                 PstartInfoExe.WindowStyle = ProcessWindowStyle.Minimized;  
  120.                 PstartInfoExe.UseShellExecute = false;  
  121.                 Process p = new Process();  
  122.                 p.StartInfo = PstartInfoExe;  
  123.                 p.Start();  
  124.                 p.WaitForInputIdle(10000);                  
  125.                 System.Threading.Thread.Sleep(2000);  
  126.   
  127.                 if (CommonFunction.Mode == StartMode.WinForm)  
  128.                 {  
  129.                     ConfigManager.GetInstance().FilePath = path;  
  130.                     if (settingDate.HasValue)  
  131.                     {  
  132.                         ConfigManager.GetInstance().ExpireDate = validDateTime;  
  133.                     }  
  134.                     ConfigManager.GetInstance().Save();  
  135.                 }  
  136.             }  
  137.             catch  
  138.             {  
  139.             }  
  140.             finally  
  141.             {  
  142.                 //update to old date  
  143.                 stopWatch.Stop();  
  144.                 NowDate.Add(stopWatch.Elapsed);  
  145.                 st.FromDateTime(NowDate);  
  146.                 Win32API.SetLocalTime(ref st);  
  147.             }  
  148.         }  
  149.     }  
  150. }  


xml儲存用

[csharp] view plaincopy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4. using System.ComponentModel;  
  5. using System.Data;  
  6. using System.Drawing;  
  7. using System.Windows.Forms;  
  8. using System.Diagnostics;  
  9. using System.IO;  
  10. using System.Xml;  
  11.   
  12. namespace ApplicationActive  
  13. {  
  14.     class ConfigManager  
  15.     {  
  16.         private static ConfigManager instance = null;  
  17.   
  18.         public static ConfigManager GetInstance()  
  19.         {  
  20.             if (instance == null)  
  21.                 instance = new ConfigManager();  
  22.             return instance;  
  23.         }  
  24.   
  25.         private DateTime? _expireDate = null;  
  26.         public DateTime? ExpireDate  
  27.         {  
  28.             get { return _expireDate; }  
  29.             set { _expireDate = value; }  
  30.         }  
  31.   
  32.         private string _filePath  = string.Empty;  
  33.         public string FilePath  
  34.         {  
  35.             get { return _filePath; }  
  36.             set { _filePath = value; }  
  37.         }  
  38.   
  39.         private ConfigManager()  
  40.         {  
  41.             GetXml();  
  42.         }  
  43.   
  44.         public void Save()  
  45.         {  
  46.             string xmlPath = Application.StartupPath + "\\" + CommonFunction.CONFIG_NAME;  
  47.             if (this._filePath == string.Empty)  
  48.             {  
  49.                 return;  
  50.             }  
  51.   
  52.             XmlWriter xmlWriter = XmlWriter.Create(xmlPath);  
  53.             xmlWriter.WriteStartElement("Root");  
  54.             xmlWriter.WriteElementString("ExePath", _filePath);  
  55.             if (_expireDate.HasValue)  
  56.             {  
  57.                 xmlWriter.WriteElementString("ExpireDate"this._expireDate.Value.ToString("yyyy/MM/dd HH:mm:ss"));  
  58.             }  
  59.             xmlWriter.WriteEndElement();  
  60.             xmlWriter.Close();  
  61.         }  
  62.   
  63.         public void GetXml()  
  64.         {  
  65.             string xmlPath = Application.StartupPath + "\\" + CommonFunction.CONFIG_NAME; ;  
  66.             if (!System.IO.File.Exists(xmlPath))  
  67.             {  
  68.                 return;  
  69.             }  
  70.             XmlDocument xmlDoc = new XmlDocument();  
  71.             xmlDoc.Load(xmlPath);  
  72.             XmlNode xmlNode = xmlDoc.SelectSingleNode("Root");  
  73.   
  74.             for (int i = 0; i < xmlNode.ChildNodes.Count; i++)  
  75.             {  
  76.                 if (xmlNode.ChildNodes[i].Name == "ExePath")  
  77.                 {  
  78.                     this._filePath = xmlNode.ChildNodes[i].InnerText;  
  79.                 }  
  80.                 if (xmlNode.ChildNodes[i].Name == "ExpireDate")  
  81.                 {  
  82.                     try  
  83.                     {  
  84.                         this._expireDate = Convert.ToDateTime(xmlNode.ChildNodes[i].InnerText);  
  85.                     }  
  86.                     catch  
  87.                     {  
  88.                     }  
  89.                 }  
  90.             }  
  91.         }  
  92.     }  
  93. }  


Form 類

[csharp] view plaincopy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Text;  
  7. using System.Windows.Forms;  
  8. using System.Diagnostics;  
  9. using System.IO;  
  10. using System.Xml;  
  11. using System.Runtime.InteropServices;  
  12. using IWshRuntimeLibrary;  
  13.   
  14. namespace ApplicationActive  
  15. {  
  16.     public partial class FrmSetting : Form  
  17.     {  
  18.         public FrmSetting()  
  19.         {  
  20.   
  21.             InitializeComponent();  
  22.         }  
  23.   
  24.         private void FrmSetting_Load(object sender, EventArgs e)  
  25.         {  
  26.             if (ConfigManager.GetInstance().FilePath != string.Empty)  
  27.             {  
  28.                 this.tbx_pgmPath.Text = ConfigManager.GetInstance().FilePath;  
  29.             }  
  30.             if (ConfigManager.GetInstance().ExpireDate.HasValue)  
  31.             {  
  32.                 this.chkExpire.Checked = true;  
  33.                 this.dtpExpireDate.Value = ConfigManager.GetInstance().ExpireDate.Value;  
  34.             }  
  35.         }  
  36.   
  37.         private void btnFile_Click(object sender, EventArgs e)  
  38.         {  
  39.             OpenFileDialog fileDialog = new OpenFileDialog();  
  40.             fileDialog.Filter = "file (*.exe)|*.exe";  
  41.             if (fileDialog.ShowDialog() == DialogResult.OK)  
  42.             {  
  43.                 this.tbx_pgmPath.Text = fileDialog.FileName;  
  44.             }  
  45.         }  
  46.   
  47.         private void btn_startPgm_Click(object sender, EventArgs e)  
  48.         {  
  49.             if (InputCheck() == false)  
  50.                 return;  
  51.   
  52.             if (this.dtpExpireDate.Enabled)  
  53.             {  
  54.   
  55.                 CommonFunction.StartProgram(this.tbx_pgmPath.Text, this.dtpExpireDate.Value);  
  56.             }  
  57.             else  
  58.             {  
  59.                 CommonFunction.StartProgram(this.tbx_pgmPath.Text, null);  
  60.             }  
  61.         }  
  62.   
  63.         private void btn_CreateIcon_Click(object sender, EventArgs e)  
  64.         {  
  65.             if (InputCheck() == false)  
  66.                 return;  
  67.   
  68.             string shortcutName = "";  
  69.             if (this.tbx_IconName.Text == string.Empty)  
  70.             {  
  71.                 shortcutName = new System.IO.FileInfo(this.tbx_pgmPath.Text).Name.Substring(0, new System.IO.FileInfo(this.tbx_pgmPath.Text).Name.Length - 4);  
  72.             }  
  73.             else  
  74.             {  
  75.                 shortcutName = this.tbx_IconName.Text;  
  76.             }  
  77.             try  
  78.             {  
  79.                 CommonFunction.CreateShortCut(this.tbx_pgmPath.Text, shortcutName);  
  80.                 MessageBox.Show("生成成功!",this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);  
  81.             }  
  82.             catch  
  83.             {  
  84.                 MessageBox.Show("生成失敗!"this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);  
  85.             }  
  86.   
  87.         }  
  88.   
  89.         private void chkExpire_CheckedChanged(object sender, EventArgs e)  
  90.         {  
  91.             if (chkExpire.Checked)  
  92.             {  
  93.                 this.dtpExpireDate.Enabled = true;  
  94.             }  
  95.             else  
  96.             {  
  97.                 this.dtpExpireDate.Enabled = false;  
  98.             }  
  99.         }  
  100.   
  101.         private void btn_Close_Click(object sender, EventArgs e)  
  102.         {  
  103.             this.Close();  
  104.         }  
  105.   
  106.         private bool InputCheck()  
  107.         {  
  108.             string filePath = this.tbx_pgmPath.Text;  
  109.             if (filePath == "")  
  110.             {  
  111.                 MessageBox.Show("file is not seleted."this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);  
  112.                 return false ;  
  113.             }  
  114.             if (!System.IO.File.Exists(filePath))  
  115.             {  
  116.   
  117.                 string backupFile = System.IO.Path.GetDirectoryName(filePath) + "\\" + CommonFunction.CRACK_FOLDER_NAME + "\\" + filePath.Substring(filePath.LastIndexOf("\\") + 1);  
  118.                 if (System.IO.File.Exists(backupFile))  
  119.                 {  
  120.                     try  
  121.                     {  
  122.                         System.IO.File.Copy(backupFile, filePath);  
  123.                     }  
  124.                     catch  
  125.                     {  
  126.                         MessageBox.Show("file is not found!"this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);  
  127.                         return false ;  
  128.                     }  
  129.                 }  
  130.                 else  
  131.                 {  
  132.                     MessageBox.Show("file is not found!"this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);  
  133.                     return false ;  
  134.                 }  
  135.             }  
  136.             return true;  
  137.         }  
  138.     }  
  139. }  


program類

[csharp] view plaincopy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Windows.Forms;  
  4.   
  5. namespace ApplicationActive  
  6. {  
  7.     static class Program  
  8.     {  
  9.         /// <summary>  
  10.         /// アプリケーションのメイン エントリ ポイントです。  
  11.         /// </summary>  
  12.         [STAThread]  
  13.         static void Main(string[] args)  
  14.         {  
  15.             Application.EnableVisualStyles();  
  16.             Application.SetCompatibleTextRenderingDefault(false);  
  17.   
  18.             ConfigManager.GetInstance().GetXml();  
  19.             if (args.Length > 0)  
  20.             {  
  21.                 CommonFunction.Mode = CommonFunction.StartMode.ShortCut;  
  22.                 string filePath = args[0];  
  23.                 if (!System.IO.File.Exists(filePath))  
  24.                 {  
  25.                     string backupFile = System.IO.Path.GetDirectoryName(filePath) + "\\" + CommonFunction.CRACK_FOLDER_NAME + "\\" + filePath.Substring(filePath.LastIndexOf("\\") + 1);  
  26.                     if (System.IO.File.Exists(backupFile))  
  27.                     {  
  28.                         try  
  29.                         {  
  30.                             System.IO.File.Copy(backupFile, filePath);  
  31.                         }  
  32.                         catch  
  33.                         {  
  34.                             MessageBox.Show("file:<" + filePath + ">" + " not found!""error", MessageBoxButtons.OK, MessageBoxIcon.Warning);  
  35.                             return;  
  36.                         }  
  37.                     }  
  38.                     else  
  39.                     {  
  40.                         MessageBox.Show("file:<" + filePath + ">" + " not found!""error", MessageBoxButtons.OK, MessageBoxIcon.Warning);  
  41.                         return;  
  42.                     }  
  43.                 }  
  44.                 CommonFunction.StartProgram(filePath, ConfigManager.GetInstance().ExpireDate);  
  45.             }  
  46.             else  
  47.             {  
  48.                 CommonFunction.Mode = CommonFunction.StartMode.WinForm;  
  49.                 Application.Run(new FrmSetting());  
  50.             }  
  51.         }  
  52.     }  
  53. }  


 以上程式是用vs2005,在xp環境下編譯的,在win7上轉化成vs2008後發現不能正常執行,其原因是win7的UAC賬戶控制,必需要以管理員的方式啟動才能執行,於是在vs2008中加入一個app.manifest檔案,配置修改如下:

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  
  3.   <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>  
  4.   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">  
  5.     <security>  
  6.       <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">  
  7.         <!-- UAC 清單選項  
  8.             如果希望更改 Windows 使用者帳戶控制級別,請用以下節點之一替換   
  9.             requestedExecutionLevel 節點。  
  10.   
  11.         <requestedExecutionLevel  level="asInvoker" uiAccess="false" />  
  12.         <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />  
  13.         <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />  
  14.   
  15.             如果您希望利用檔案和登錄檔虛擬化提供  
  16.             向後相容性,請刪除 requestedExecutionLevel 節點。  
  17.         -->  
  18.         <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />  
  19.       </requestedPrivileges>  
  20.     </security>  
  21.   </trustInfo>  
  22. </asmv1:assembly>  

關鍵是這句:<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

重新編譯後在Win7下就能正常執行了。

轉載請註明出處:http://blog.csdn.net/xiashengwang/article/details/7096715

相關文章