2013-06-05 41 views
8

Tôi đang cố tạo một lối tắt cho một thư mục theo chương trình. Tôi đã tìm thấy rất nhiều ví dụ, nhưng không có ví dụ nào xuất hiện thực sự.C# lập trình tạo lối tắt tới thư mục không phải lúc nào cũng hoạt động

tôi quan sát ba kết quả khác nhau về tính chất các phím tắt sản xuất của:

  1. Các Loại Shortcut của file được gán là "Shortcut (.lnk)" mà gây ra hộp thoại Open With để bật lên yêu cầu tôi đính kèm một phần mở rộng cho nó.

  2. Loại lối tắt thuộc tính tệp được chỉ định là "Tệp" hoàn toàn không có gì khi nhấp đúp.

  3. Hoặc cuối cùng là khóa học ưa thích của tôi ... loại Lối tắt thuộc tính tệp được gán là: "Thư mục tệp" hoạt động như bình thường.

Đây là mã tôi hiện đang sử dụng ... Tôi đã thử một vài biến thể này.

bool IsExists = false; 
string icon = appPath + "Welcome.ico"; 

// Their is a difference to local and ClickOnce App locations... this compensates for it 
IsExists = System.IO.File.Exists(icon); 
if (!IsExists) 
{ 
    icon = appPath + @"bin\Debug\Welcome.ico"; 

} 

var desktop = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); 
var target = (Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\Artronix\Welcome To FreightWare Online\").Replace(@"\","/"); 
IWshShortcut shortcut; 
var wshShell = new WshShellClass(); 
shortcut = (IWshShortcut)wshShell.CreateShortcut(Path.Combine(desktop, @"FreightWare Resources.lnk")); 
shortcut.IconLocation = icon; 
shortcut.TargetPath = Path.GetFullPath(target); 
shortcut.Save(); 
+1

Tôi nghi ngờ appPath là thủ phạm với nhiều thông tin này. Sử dụng nửa sau của mã của bạn (và sử dụng tập tin .ico của riêng tôi), tôi luôn nhận được kết quả thứ ba. Tôi chỉ đạt được kết quả đầu tiên khi đường dẫn đích không tồn tại. Nếu bạn có thể thu hẹp theo điều kiện nào thì kết quả khác nhau, điều đó có thể giúp – panhandel

+0

Đây là appPath: chuỗi riêng appPath = System.AppDomain.CurrentDomain.BaseDirectory; Sự khác biệt nằm ở thực tế là nếu tôi cài đặt ứng dụng này cục bộ thông qua InstallShield hoặc VS nó sẽ cài đặt tệp biểu tượng trong cùng thư mục với appPath ... nhưng khi tôi chạy một cài đặt chỉ ClickOnce Web vì lý do nào đó, hãy thêm một thư mục bin và Debug khác trong thư mục appPath ... do đó câu lệnh if nếu không tìm thấy trong appPath thì hãy nhìn vào bên trong thư mục mở rộng. Cũng lưu ý rằng biểu tượng luôn hiển thị bên trong phím tắt nên tôi biết nó đang tìm đường dẫn chính xác. –

+0

Tôi rất cám dỗ để downvote, chỉ vì bạn đang yêu cầu upvotes. Tôi khá chắc chắn có một quy tắc chống lại điều đó ở đâu đó, ngoài việc nó là một giả mạo internet rõ ràng. – Mels

Trả lời

2

Hãy thử ShellLink:

using (ShellLink shortcut = new ShellLink()) 
{ 
    shortcut.Target = Application.ExecutablePath; 
    shortcut.WorkingDirectory = Path.GetDirectoryName(Application.ExecutablePath); 
    shortcut.Description = "My Shorcut Name Here"; 
    shortcut.DisplayMode = ShellLink.LinkDisplayMode.edmNormal; 
    shortcut.Save("%HOMEPATH%/Desktop/"); 
} 
2

Cảm ơn mọi người giúp đỡ của bạn ... I figured it out. Tôi không muốn đăng nó như một câu trả lời, nhưng chỉ nghĩ trong trường hợp người khác tình cờ gặp phải vấn đề tương tự ... Mặc dù tôi cảm thấy ngượng ngùng về sự giám sát của tôi.

Hóa ra không có gì sai với mã. Panhandel đã cho tôi một đầu mối để tìm ra giải pháp khi ông đưa ra tuyên bố: "Tôi chỉ đạt được kết quả đầu tiên khi con đường mục tiêu không tồn tại." Vì anh ấy luôn nhận được kết quả chính xác và anh ấy chỉ nhận được kết quả mà tôi nhận được khi thư mục không tồn tại ... Tôi nhận ra vấn đề có thể là tôi tạo thư mục theo chương trình trong một dòng rồi tạo biểu tượng tiếp theo .. Tôi cần phải cung cấp cho hệ thống nhiều thời gian hơn cho thư mục được tạo hoàn toàn

Các vấn đề liên quan