与vb.net创建文件关联

时间:2013-06-19 08:51:12

标签: vb.net installer file-association

我正在vb.net上创建一个安装,我想将我的应用程序设置为扩展的默认应用程序 - 例如,txt。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

这种事情通常由专门的安装程序处理,但您可以使用.net代码执行此操作,尽管您的程序在运行时需要管理员权限...

在VB.NET中查看这个完整的例子:

http://www.devx.com/vb2themax/Tip/19554?type=kbArticle&trk=MSCP

感谢Marco Bellinaso的代码。以下是防止链接损坏的逐字代码:

<System.Runtime.InteropServices.DllImport("shell32.dll")> Shared Sub _
    SHChangeNotify(ByVal wEventId As Integer, ByVal uFlags As Integer, _
    ByVal dwItem1 As Integer, ByVal dwItem2 As Integer)
End Sub


' Create the new file association
'
' Extension is the extension to be registered (eg ".cad"
' ClassName is the name of the associated class (eg "CADDoc")
' Description is the textual description (eg "CAD Document"
' ExeProgram is the app that manages that extension (eg "c:\Cad\MyCad.exe")

Function CreateFileAssociation(ByVal extension As String, _
    ByVal className As String, ByVal description As String, _
    ByVal exeProgram As String) As Boolean
    Const SHCNE_ASSOCCHANGED = &H8000000
    Const SHCNF_IDLIST = 0

    ' ensure that there is a leading dot
    If extension.Substring(0, 1) <> "." Then
        extension = "." & extension
    End If

    Dim key1, key2, key3 As Microsoft.Win32.RegistryKey
    Try
        ' create a value for this key that contains the classname
        key1 = Microsoft.Win32.Registry.ClassesRoot.CreateSubKey(extension)
        key1.SetValue("", className)
        ' create a new key for the Class name
        key2 = Microsoft.Win32.Registry.ClassesRoot.CreateSubKey(className)
        key2.SetValue("", description)
        ' associate the program to open the files with this extension
        key3 = Microsoft.Win32.Registry.ClassesRoot.CreateSubKey(className & _
            "\Shell\Open\Command")
        key3.SetValue("", exeProgram & " ""%1""")
    Catch e As Exception
        Return False
    Finally
        If Not key1 Is Nothing Then key1.Close()
        If Not key2 Is Nothing Then key2.Close()
        If Not key3 Is Nothing Then key3.Close()
    End Try

    ' notify Windows that file associations have changed
    SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0)
    Return True
End Function

答案 1 :(得分:0)

我找到了一种通过vb.net关联文件的简单方法(来自CodeProject,链接:http://www.codeproject.com/Articles/18594/File-Association-in-VB-NET

代码是:

My.Computer.Registry.ClassesRoot.CreateSubKey(".rtf").SetValue("", "Rich Text File", Microsoft.Win32.RegistryValueKind.String)
    My.Computer.Registry.ClassesRoot.CreateSubKey("Rich Text File\shell\open\command").SetValue("", Application.ExecutablePath & " ""%l"" ", Microsoft.Win32.RegistryValueKind.String)